复合索引的列顺序判断

WBOY
Lepaskan: 2016-06-07 15:55:54
asal
1801 orang telah melayarinya

复合索引最令人困惑的当属索引列的顺序,不仅依赖于使用该索引的查询,更需考虑排序和分组。前段时候我发了个帖子:where条件顺序和复合索引字段顺序。感兴趣的朋友不妨参与讨论。今天我提个自己的观点。在应用开发阶段,【选择性】是我们首要考虑因素,请看

复合索引最令人困惑的当属索引列的顺序,不仅依赖于使用该索引的查询,更需考虑排序和分组。前段时候我发了个帖子:where条件顺序和复合索引字段顺序。感兴趣的朋友不妨参与讨论。今天我提个自己的观点。在应用开发阶段,【选择性】是我们首要考虑因素,请看简图:\
当出现sql性能问题时,你可能需要注意以下几个:1. 随机IO2. 排序(order by)3. 分组(group by or distinct)这时不必也不应该在关注【选择性】我的经验便是,在你手上已经有Top N SQL时,我们应该优先考虑【值的分布】,而不是选择性。
那么该如何判断【值的分布】,我们通过一种被geek称之为 【sarg】的方法,具体操作如下:假如,我们有如下query:
select * from userresult_f where askid=800808 and uid=110996854;
Salin selepas log masuk

则有2个索引可供选择:1. idx_1 (askid,uid)2. idx_2 (uid,askid)是1 还是2 ?利用【sarg】方法:
mysql> select sum(askid=800808),sum(uid=110996854) from userresult_f\G;
*************************** 1. row ***************************
sum(askid=800808): 6
sum(uid=110996854): 2
1 row in set (0.00 sec)
Salin selepas log masuk

依据查询输出,我们应该选择 idx_2
By 数据牧羊人Good Luck!2014-4-27 19:05 于福州


Label berkaitan:
sumber:php.cn
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan