DAY6:索引案例(MySQL)

一、支持多种过滤条件

案例一、IN()技术
(sex,country,region,age)和(sex,country,region,city,age)这样的组合索引 分析:
性别,全部国家列表,或国家的全部地区列表。通过IN()技术实现。
案例二、范围查询放在最后
因查询只能使用最左前缀,直到遇到第一个范围条件列。故尽可能把范围查询放到索引的后面,以便优化器使用尽可能多的索引列。
注意:
每增加一个IN()条件,优化器需要做的的组合都将以指数形式增加,最终可能会极大降低查询性能。
新版本MySQL在组合数超过一定数量将不再进行执行计划评估,可能会导致MySQL不能很好的利用索引。

二、避免多个范围条件

范围条件查询
SELECT * FROM t1
  WHERE key_col > 1
  AND key_col < 10;

等值条件查询
SELECT * FROM t1
  WHERE key_col = 1
  OR key_col IN (15,18,20);

范围查询和等值查询效率:
MySQL无法使用范围列后面的其他索引列。
多个等值条件查询则没有改限制。

待核实问题:MySQL支持松散索引扫描

三、优化排序

百万数据表的翻页问题:因为随着偏移量的增加,MySQL需要花费大量时间来扫描需要丢弃的数据。
解决方案:

  1. 反范式化、预先计算、缓存
  2. 限制用户翻页数量
  3. 延迟关联
    原文作者:蚂蚁窝大梦想
    原文地址: https://www.jianshu.com/p/a8d9162751c8
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞