表结构:sql:
SELECT vod_id FROM `ia_comment` where vod_id>0 and account_id=88;
SELECT vod_id FROM `ia_comment` where account_id=88;
结果:
[SQL]SELECT vod_id FROM `ia_comment` where vod_id>0 and account_id=88;
受影响的行: 0
时间: 0.323s[SQL]
SELECT vod_id FROM `ia_comment` where account_id=88;
受影响的行: 0
时间: 0.152s
为什么第二条sql扫描的rows多效率反而更高
两条sql得到的数据是一样的
vod_id 全部大于0
SELECT vod_id FROM `ia_comment` where vod_id>0 and account_id=88;
SELECT vod_id FROM `ia_comment` where account_id=88;
结果:
[SQL]SELECT vod_id FROM `ia_comment` where vod_id>0 and account_id=88;
受影响的行: 0
时间: 0.323s[SQL]
SELECT vod_id FROM `ia_comment` where account_id=88;
受影响的行: 0
时间: 0.152s
为什么第二条sql扫描的rows多效率反而更高
两条sql得到的数据是一样的
vod_id 全部大于0
解决方案 »
- mysql 总报错 Error Code : 1064 请高手指点
- 一个Mysql的字符串查询问题
- mysql+tomcat,mysql的查询结果,中文全显示为乱码,jsp中的中文能正常显示,但从mysql经tomcat查询而来的结果显示为乱码.
- 查A表中所有的分类(去除重复)。数据量大。该如何优化?
- 求助大虾有关mysql树的问题
- mysql问题:String字符串怎样转换成sql查询的结果集
- SQL 语句问题:较复杂,谢谢
- mysql5.0.19安装出错,大家来看看
- 请高手给一个Windows下Mysql数据库日常备份和故障回复的方案!感激不尽!
- mysql migration toolkit 启动报错
- MySQL5.5版本后,对单个表的查询,存储过程相比即席查询,优势还有吗?
- mysql 返回字段类型转换问题
而第二条key_len是8,也就是说,where条件直接在索引上判断。
所以第二条会快一点。
第一条SQL是4,说明只用到了联合索引的第一个列vod_id,所以vod_id这个索引只用于vod_id>0的筛选,从索引读取数据之后,还要进行account_id=88的判断。
第二条SQL是8,说明用的是组合索引。rows:
当只用索引void_id时,vod_id>0 时,索引可能扫描25w+,当用组合做引时,可能扫描51W+,这个数据有时会是过期的不正确(有时需要table analysis下),用1列索引,2列索引时,有自己的策略,并不是说有50w 索引扫描就是50w,有可能是25W。时间:
第一条、根据索引扫描后,每条都需要再次判断是否=88。
第二条、根据索引可以直接定位到目标行。这个把重点搞偏了,vod_id全部>0, 不应这样写where条件。account_id 为具体值,不应该在组合索引后。
目前这个索引基本也是费的。