复合索引最令人困惑的当属索引列的顺序。不仅依赖于使用该索引的查询,更需考虑排序和分组。
前段时候我发了个帖子:where条件顺序和复合索引字段顺序。感兴趣的朋友最好还是參与讨论。
今天我提个自己的观点。![](data:image/png;base64,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)
在应用开发阶段,【选择性】是我们首要考虑因素,请看简图:
当出现sql性能问题时,你可能须要注意下面几个:
1. 随机IO
2. 排序(order by)
3. 分组(group by or distinct)
这时不必也不应该在关注【选择性】
我的经验便是。在你手上已经有Top N SQL时,我们应该优先考虑【值的分布】。而不是选择性。
那么该怎样推断【值的分布】,我们通过一种被geek称之为 【sarg】的方法,详细操作例如以下:
假如,我们有例如以下query:
select * from userresult_f where askid=800808 and uid=110996854;
则有2个索引可供选择:
1. idx_1 (askid,uid)
2. idx_2 (uid,askid)
是1 还是2 ?
利用【sarg】方法:
mysql> select sum(askid=800808),sum(uid=110996854) from userresult_fG; *************************** 1. row *************************** sum(askid=800808): 6 sum(uid=110996854): 2 1 row in set (0.00 sec)
根据查询输出。我们应该选择 idx_2
By 数据牧羊人
Good Luck!
2014-4-27 19:05 于福州