在索引列上使用替换函数时,不使用索引

时间:2014-07-11 07:59:46

标签: mysql query-optimization

我在桌面上有一个sql查询,其中mobileno column mobileno包含" - "所以在where子句中我需要使用replace(mobileno," - ","")函数进行比较。
使用explain函数,我检查了如果在索引列上使用函数,它不会使用索引。那么我如何强制sql使用索引或任何其他替代方法来提高我的查询性能。

1 个答案:

答案 0 :(得分:0)

您确定因为REPLACE功能而未使用索引吗?也许没有足够的行来使用索引值得。或者其他一些原因。

我运行了4256行测试,令我惊讶的是,使用了索引,即使使用REPLACE:

EXPLAIN EXTENDED SELECT mobileno FROM test WHERE REPLACE(mobileno, '(', '') = '123) 456-789'

id  select_type table   type    possible_keys   key         key_len ref     rows    filtered    Extra
1   SIMPLE      test    index   NULL            mobileno    768     NULL    4256    100         "Using where; Using index"