索引 - where里用函数索引不生效 ¶
作者:KK
发表日期:2017.8.31
要点速读 ¶
在WHERE子句里使用函数,有时候不会使用索引
如果你必须往条件语句里加函数进行计算,务必考虑对查询时长的影响,并且explain一下看看是否使用了索引
个人主张MySql做好数据存取的职责,数据计算的事交给编程语言;在大并发查询的情况下,后面还有一堆查询语句等着处理,你却让MySql把时间花在数据计算上,这根本不值得,赶紧让MySql把数据交给编程语言层面,让编程语言进行计算,然后MySql就能马上处理下一个查询语句了
比方说 ¶
WHERE UNIX_TIMESTAMP(add_time) > 12345
这样的条件下,当存在add_time索引时它并不会被启用
但这并不是绝对的,比如你有个tinyint字段,建立索引后进行WHERE abs(age) > 50
它又能使用索引
所以并不是所有情况下使用函数都会影响DB使用索引的选择
具体深入的细节我还没找到太合适的文献解读,但目前来说我们知道这个规律就已经足够支撑日常应用了——使用函数时,小心点吧,注意下索引用了没有,如果没用,你可能要取消使用函数了,除非你不在乎这些损耗