聚簇索引==聚集索引:根据主键建立的索引;并不是一种单独类型的索引,只是一种数据存储方式。
非聚簇索引==辅助索引==二级索引: 开发人员根据实际情况自己建立的索引
聚簇索引:
根据主键建立的索引(B+树),叶子节点包含了实际存储的各行数据;
辅助索引:
根据开发人员建立的索引(也是B+树),其中各节点只存储索引包含的列,叶子节点还包含主键值,并不包含整行实际数据。
由上可知,如果我们建立了一个索引(非主键),而查询的内容字段不包含在索引中、也不是主键,那么需要:先根据辅助索引查找到叶子节点中的主键值,再根据主键值去聚簇索引中查找到相应的数据。这个过程因为从辅助索引查到底(叶子节点)后,又回头重新从聚簇索引开始查,叫做回表查询。
覆盖索引:并不是一种索引类型,只是某种优化得很好的索引,即一个索引包含了所有需要查询的字段的值,我们就称之为“覆盖索引”。
另注:以下代码可以看使用量为0的索引:
SELECT
object_type,
object_schema,
object_name,
index_name,
count_star,
count_read,
COUNT_FETCH
FROM
PERFORMANCE_SCHEMA.table_io_waits_summary_by_index_usage
where
object_schema='库名'
and count_read=0
and count_fetch=0
and object_name='表名';