mysql 索引例子_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需要花费大量时间来扫描需要丢弃的数据。

解决方案:

反范式化、预先计算、缓存

限制用户翻页数量

延迟关联

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值