Mysql 关于复合索引的顺序。a 在前?b 在前?

2014-05-27 14:49:25 +08:00
 xmbaozi
有个表5000w的记录,要给a、b列建唯一索引。其中a为int,大概分布在1-1500左右;b为varchar(32),8-32个字符,b中出现重复的极低。
现在考虑到where a=x1 and b=x2的情况,这个索引顺序怎么建比较科学,然后理由?

已经google过了,如
http://blog.segmentfault.com/waterblog/1190000000473085
5.联合索引的顺序问题:将选择性高的索引放到前面


众神什么看?
6760 次点击
所在节点    MySQL
4 条回复
duzhe0
2014-05-27 15:00:36 +08:00
测一下实际效果看看。估计差别不大, 没必要那么纠结。我猜b-a可能好一点
tonitech
2014-05-28 02:33:39 +08:00
楼主做个测试再给个答案吧
cyyever
2014-05-28 09:36:12 +08:00
根据选择率是a-b,但是有个问题,这样做索引会比b-a大,因为a-b中a出现了1500次,b也出现了1500次,如果是key buffer比较稀缺的话,还不如b-a,毕竟查内存索引总比查磁盘索引快吧
我建议楼主两个索引都创建一下,然后用show table status看下index大小。然后结合服务器资源综合考虑
我的看法是内存再慢也比io快,redis就是省内存,比memcached现在发展得好。。虽然它单个操作可能比memcached慢。。
tonic
2014-05-28 12:19:42 +08:00
(b, a) use where b= and a=

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/114485

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX