对mysql联合索引中的字段进⾏合理排序
在MySQL的where条件中,有时会⽤到很多的条件,通常为了加快速度会把这些字段放到联合索引中,可以更快的提⾼搜索速度;
但是对联合索引中字段顺序的合理排序,便更能提⾼速度
例⼦:select * from table where (groupid=1000) and (userid=500) and (time=140012345)
建⽴的索引也通常很随性的就按照where条件中字段的顺序建⽴
ALTER TABLE table ADD INDEX g_u_time_index(groupid,userid,time);
那么MySQL就会先检索到groupid=1000的所有数据,假如搜到了1000条,再在检索到的1000条数据中再检索userid=500的数据,假设还剩余300条,再在300条中搜索time=140012345的数据,假设就剩了100条;这样总共搜索了1000+300+100=1400条数据才到符合的100条
但是为了更好的优化,我们现在需要在建⽴索引前,对这⼏个字段进⾏计算,计算他们在表中所占的⽐例
可以写⼀个select语句来查看:计算各个条件在表中所占的⽐例⼤⼩
查看mysql索引
select count(*) total,sum(groupid=1000) gtotal,sum(userid=500) utotal,sum(time=1400123456) time from table;
total 10000
gtotal 1000
utotal 300
time 800
可见如果先搜索岛userid=500的数据就可以剔除掉⼀⼤半,只剩下300条符合的,再在300中搜索符合time=1400123456和groupid=1000的数据,这样就⼤⼤缩减了查询次数;
按照从⼩到⼤的顺序排列,可以减少搜索次数
sql改为:select * from table where (userid=500) and (time=140012345) and (groupid=1000)
ALTER TABLE table ADD INDEX g_u_time_index ( userid , time , groupid)
参考:《⾼性能MySQL》第五章创建⾼性能索引
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论