什么情况下索引会失效?即查询不走索引?

下面列举几种不走索引的 SQL 语句:

1、索引列参与表达式计算:

SELECT 'sname' FROM 'stu' WHERE 'age' + 10 = 30;

2、 函数运算:

SELECT 'sname' FROM 'stu' WHERE LEFT('date',4) < 1990; 

3、%词语%–模糊查询:

SELECT * FROM 'manong' WHERE `uname` LIKE '码农%' -- 走索引 

SELECT * FROM 'manong' WHERE `uname` LIKE '%码农%' -- 不走索引 

4、 字符串与数字比较不走索引:

“`mysql
CREATE TABLE 'a' ('a' char(10));
EXPLAIN SELECT * FROM 'a' WHERE 'a'="1" — 走索引
EXPLAIN SELECT * FROM 'a'WHERE 'a'=1 — 不走索引,同样也是使用了函数运算
“`

5、 查询条件中有 or ,即使其中有条件带索引也不会使用。换言之,就是要求使用的所有字段,都必须建立索引:

select * from dept where dname='xxx' or loc='xx' or deptno = 45;

6、正则表达式不使用索引。

7、 MySQL 内部优化器会对 SQL 语句进行优化,如果优化器估计使用全表扫描要比使用索引快,则不使用索引。

发表评论

后才能评论

评论(3)

  • mpweixin用户 普通 2022-02-15 2:34 下午

    第7种情况的例子:https://blog.csdn.net/sjhcqw/article/details/109103008?utm_medium=distribute.pc_aggpage_search_result.none-task-blog-2~aggregatepage~first_rank_ecpm_v1~rank_v31_ecpm-7-109103008.pc_agg_new_rank&utm_term=%E8%8C%83%E5%9B%B4%E6%9F%A5%E8%AF%A2%E6%98%AF%E5%90%A6%E5%8F%AF%E4%BB%A5%E4%BD%BF%E7%94%A8%E7%B4%A2%E5%BC%95&spm=1000.2123.3001.4430

  • ǚ 普通 2021-06-20 3:13 下午

    SELECT * FROM ‘manong’ WHERE `uname` LIKE ‘%码农%’ — 走索引

    SELECT * FROM ‘manong’ WHERE `uname` LIKE “%码农%” — 不走索引

    貌似两个都不会走索引吧,%不能在左边。