《高性能的MySQL》阅读笔记——创建高性能的索引
Aug 8, 2020
目录:
维护索引和表
优化排序
对于索引的选择性非常低的列,如 sex 列,该如何排序?
可以增加一些特殊的索引来做排序,如创建 (sex, rating) 索引用于下面的查询:1SELECT cols FROM profiles WHERE sex='M' ORDER BY rating LIMIT 10;
即使有索引,但是用户需要翻页,并且页面比较靠后的时候可能也会很慢。如下面的 sql :1SELECT cols FROM profiles WHERE sex='M' ORDER BY rating LIMIT 100000, 10;
随着偏移量的增加 MySQL 需要花费大量的时间来扫描需要丢弃的数据。
一个解决方法就是延迟关联,通过覆盖索引返回需要的主键,在根据这些主键关联表,获得需要的行。123SELECT cols FROM profiles INNER JOIN ( SELECT cols FROM profiles WHERE x.sex='M' ORDER BY rating LIMIT 100000, 10) AS x USING(cols);
延迟关联其实涉及到 LIMIT 语句的一些细节用法,接下来参考 MySQL 官方文档,介绍下 ORDER BY 和 LIMIT 。