论坛首页 综合技术论坛

mysql 查询 条件过滤机制是怎样的?

浏览 1447 次
该帖已经被评为隐藏帖
作者 正文
   发表时间:2009-12-29  
我有一条统计数据的SQL语句。情况就不说了,直接上句子吧(Mysql)!

优化前:
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的查询机制。

   发表时间:2009-12-30  
SUBSTRING(u.`REG_IP`)的问题。
Mysql在遇到这种情况下是要全表扫描的,而你只是要一个count,当然慢了。MySQL目前还不支持函数索引,当发现查询的属性是函数的时候只能全表扫描。你用explain分析一下你的语句,看看Mysql给出的执行计划就知道为什么那么慢了。
0 请登录后投票
论坛首页 综合技术版

跳转论坛:
Global site tag (gtag.js) - Google Analytics