对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语句来查看:计算各个条件在表中所占的比例大小
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》第五章创建高性能索引
对mysql联合索引中的字段进行合理排序的更多相关文章
- SQL Server中的联合主键、聚集索引、非聚集索引、mysql 联合索引
我们都知道在一个表中当需要2列以上才能确定记录的唯一性的时候,就需要用到联合主键,当建立联合主键以后,在查询数据的时候性能就会有很大的提升,不过并不是对联合主键的任何列单独查询的时候性能都会提升,但我 ...
- MySQL 联合索引详解
MySQL 联合索引详解 联合索引又叫复合索引.对于复合索引:Mysql从左到右的使用索引中的字段,一个查询可以只使用索引中的一部份,但只能是最左侧部分.例如索引是key index (a,b,c ...
- mysql 联合索引(转)
http://blog.csdn.net/lmh12506/article/details/8879916 mysql 联合索引详解 联合索引又叫复合索引.对于复合索引:Mysql从左到右的使用索引中 ...
- mysql联合索引详解
联合索引又叫复合索引.对于复合索引:Mysql从左到右的使用索引中的字段,一个查询可以只使用索 引中的一部份,但只能是最左侧部分.例如索引是key index (a,b,c). 可以支持a | a,b ...
- mysql联合索引
命名规则:表名_字段名1.需要加索引的字段,要在where条件中2.数据量少的字段不需要加索引3.如果where条件中是OR关系,加索引不起作用4.符合最左原则 https://segmentfaul ...
- [转]mysql联合索引
mysql联合索引 命名规则:表名_字段名1.需要加索引的字段,要在where条件中2.数据量少的字段不需要加索引3.如果where条件中是OR关系,加索引不起作用4.符合最左原则 https:/ ...
- mysql:联合索引及优化
命名规则:表名_字段名1.需要加索引的字段,要在where条件中2.数据量少的字段不需要加索引3.如果where条件中是OR关系,加索引不起作用4.符合最左原则 尽量不要用or,如果可以用union代 ...
- 【原创】面试官:谈谈你对mysql联合索引的认识?
引言 本文预计分为两个部分: (1)联合索引部分的基础知识 在这个部分,我们温习一下联合索引的基础 (2)联合索引部分的实战题 在这个部分,列举几个我认为算是实战中的代表题,挑出来说说. 正文 基础 ...
- 我说MySQL联合索引遵循最左前缀匹配原则,面试官让我回去等通知
面试官: 我看你的简历上写着精通MySQL,问你个简单的问题,MySQL联合索引有什么特性? 心想,这还不简单,这不是问到我手心里了吗? 听我给你背一遍八股文! 我: MySQL联合索引遵循最左前缀匹 ...
随机推荐
- Gblocks命令行
使用默认的设置: $ Gblocks proteins.fasta -t=p 必须是 fasta 文件在前,参数在后.若没有参数,则进入交互式界面. Gblocks cds.fasta −t=c −b ...
- express-session deprecated undefined resave option; provide resave option app.js
nodejs使用express-session报错 代码如下 app.use(session({ secret: 'hubwiz app', //secret的值建议使用随机字符串 cookie: { ...
- 20155218 2006-2007-2 《Java程序设计》第3周学习总结
20155218 2006-2007-2 <Java程序设计>第3周学习总结 教材学习内容总结 ==使用在比较两个参考名称是否参考同一对象:equals()比较实质是否相同. 看见new关 ...
- 20155235 2016-2017-2 《Java程序设计》第9周学习总结
20155235 2016-2017-2 <Java程序设计>第9周学习总结 教材学习内容总结 第十六章 整合数据库 JDBC入门 JDBC简介 连接数据库 使用Statement.Res ...
- 20155330 2016-2017-2 《Java程序设计》第十周学习总结
20155330 2016-2017-2 <Java程序设计>第十周学习总结 教材学习内容总结 学习目标 了解计算机网络基础 掌握Java Socket编程 理解混合密码系统 掌握Java ...
- Deep Learning 教程翻译
Deep Learning 教程翻译 非常激动地宣告,Stanford 教授 Andrew Ng 的 Deep Learning 教程,于今日,2013年4月8日,全部翻译成中文.这是中国屌丝军团,从 ...
- SRM 563 500pts SpellCards
SpellCards 题意: 有n张符卡排成一个队列,每张符卡有两个属性,等级li和伤害di. 两种操作: 1.把队首的符卡移动到队尾:2.使用队首的符卡,对敌人造成di点伤害,并丢弃队首的li张符卡 ...
- 理解依赖注入(Dependency Injection)
理解依赖注入 Yii2.0 使用了依赖注入的思想.正是使用这种模式,使得Yii2异常灵活和强大.千万不要以为这是很玄乎的东西,看完下面的两个例子就懂了. class SessionStorage { ...
- Eclipse 使用过程中的问题及解决方法
1.Eclipse中java文件和jsp字体大小设置 1.更改所有文件的字体显示大小过程: Window->preferences->General->Appearance-> ...
- php 操作 oracle lob 数据
http://www.oracle.com/technetwork/articles/fuecks-lobs-095315.html Working with LOBs in Oracle and P ...