提问:什么是聚簇索引什么是非聚簇索引?
回答:聚簇索引(聚集索引):数据与索引放到一块,B+树的叶子节点保存了整行数据,有且只有一个;
非聚簇索引(二级索引):数据与索引分开存档,B+树的叶子节点保存对应的主键,可以有多个。
提问:知道什么是回表查询?
回答:通过二级索引找到对应的主键值,到聚集索引中查找整行数据,这个过程就是回表。
提问:知道什么是索引覆盖吗?
回答:覆盖索引是指查询使用了索引,返回的列,必须在索引中全部能够找到。
·使用id查询,直接走聚集索引查询,一次性扫描,直接返回数据,性能高
·如果返回列中没有创建索引,有可能会触发回表查询,避免使用select *
提问:MYSQL超大分页怎么处理?
回答:在数据量比较大的时候,limit分页查询,需要对数据进行排序,效率低
优化思路:一般分页查询时,通过创建覆盖索引能够比较好的提高性能,可以通过覆盖索引加子查询进行优化(覆盖索引+子查询)
例如:
select *
from tb_sku t,
(select id from tb_sku order by id limit 900000, 10) a --覆盖索引更快
where t.id = a.id;