索引 - where里用函数索引不生效

  • 作者:KK

  • 发表日期:2017.8.31


要点速读

  1. 在WHERE子句里使用函数,有时候不会使用索引

  2. 如果你必须往条件语句里加函数进行计算,务必考虑对查询时长的影响,并且explain一下看看是否使用了索引

  3. 个人主张MySql做好数据存取的职责,数据计算的事交给编程语言;在大并发查询的情况下,后面还有一堆查询语句等着处理,你却让MySql把时间花在数据计算上,这根本不值得,赶紧让MySql把数据交给编程语言层面,让编程语言进行计算,然后MySql就能马上处理下一个查询语句了


比方说

WHERE UNIX_TIMESTAMP(add_time) > 12345这样的条件下,当存在add_time索引时它并不会被启用

但这并不是绝对的,比如你有个tinyint字段,建立索引后进行WHERE abs(age) > 50它又能使用索引

所以并不是所有情况下使用函数都会影响DB使用索引的选择

具体深入的细节我还没找到太合适的文献解读,但目前来说我们知道这个规律就已经足够支撑日常应用了——使用函数时,小心点吧,注意下索引用了没有,如果没用,你可能要取消使用函数了,除非你不在乎这些损耗