浏览 1447 次
锁定老帖子 主题:mysql 查询 条件过滤机制是怎样的?
该帖已经被评为隐藏帖
|
|
---|---|
作者 | 正文 |
发表时间:2009-12-29
优化前: select count(u.ID) from USER_INFO u where SUBSTRING(u.`REG_IP`)='10.0.1' and u.REG_TIME >'2009-01-01' and u.REG_TIME <='2009-12-30 23:59:59' and SUBSTRING_INDEX(u.REG_IP,'.',-1)>=10 and SUBSTRING_INDEX(u.REG_IP,'.',-1)<=102 优化后: select count(u.ID) from USER_INFO u where u.`REG_IP` LIKE '10.0.1%' and u.REG_TIME >'2009-01-01' and u.REG_TIME <='2009-12-30 23:59:59' and SUBSTRING_INDEX(u.REG_IP,'.',-1)>=10 and SUBSTRING_INDEX(u.REG_IP,'.',-1)<=102 优化之后快了几千倍。有没有那位高手帮我解释一下其中的原因或者说Mysql的查询机制。 声明:ITeye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
推荐链接
|
|
返回顶楼 | |
发表时间:2009-12-30
SUBSTRING(u.`REG_IP`)的问题。
Mysql在遇到这种情况下是要全表扫描的,而你只是要一个count,当然慢了。MySQL目前还不支持函数索引,当发现查询的属性是函数的时候只能全表扫描。你用explain分析一下你的语句,看看Mysql给出的执行计划就知道为什么那么慢了。 |
|
返回顶楼 | |