在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语句来查看:计算各个条件在表中所占的比例大小

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》第五章创建高性能索引

最新文章

  1. SQL 联合查询 + XML解析
  2. IM架构(一)JSQMessagesViewController
  3. inline-block的兼容性问题
  4. SolrJ总结
  5. ORM相关操作
  6. Python 在已创建的数据表添加字段报错问题
  7. Docker Image管理学习笔记,ZT
  8. linux学习 (Linux就该这么学)
  9. TinyMCE与Domino集成
  10. Kafka设计解析(二十)Apache Flink Kafka consumer
  11. C# MVC框架初学者
  12. 2018.07.24 loj#107. 维护全序集(非旋treap)
  13. Web 前端攻防(2014版)-baidu ux前端研发部
  14. debian下qt4动态编译
  15. android:imeOptions属性
  16. Docker入门与应用系列(六)Docker私有与公共镜像仓库
  17. Java 实现--时间片轮转 RR 进程调度算法
  18. (七)jQuery中的DOM操作
  19. apache vhosts 虚拟主机设置
  20. 1080 Graduate Admission (30)(30 分)

热门文章

  1. CentOS 7.2重启网络报错 Failed to start LSB: Bring up/down
  2. 30. Insert Interval【LintCode by java】
  3. Reflow & Repaint
  4. 20155315 2016-2017-2《Java程序设计》课程总结
  5. [2016北京集训试题7]thr-[树形dp+树链剖分+启发式合并]
  6. 优步UBER司机奖励政策:含高峰、翻倍、行程、金牌司机、保底奖励(持续更新...)
  7. Yii2.0 高级模版编写使用自定义组件(component)
  8. mac php版本切换
  9. 学习HTML 第二节.HTML头部
  10. JVM自动内存管理机制--读这篇就GO了