在MySQL中,并不是你建立了索引,并且你在SQL中使用到了该列,MySQL就肯定会使用到那些索引的,有一些情况很可能在你不知不觉中,你就“成功的避开了”MySQL的所有索引。

1、索引列参与计算,不走索引

SELECT `username` FROM `t_user` WHERE age=20;-- 会使用索引
SELECT `username` FROM `t_user` WHERE age+10=30;-- 不会使用索引!!因为所有索引列参与了计算
SELECT `username` FROM `t_user` WHERE age=30-10;-- 会使用索引

2、索引列使用函数,可能不走索引

-- 不会使用索引,因为使用了函数运算,原理与上面相同
SELECT username FROM t_user WHERE concat(username,'1') = 'admin1';
-- 会使用索引
SELECT username FROM t_user WHERE username = concat('admin','1'); 

3、索引列使用 like 语句,可能不走索引

SELECT * FROM USER WHERE username LIKE 'mysql测试%'   --走索引
SELECT * FROM USER WHERE username LIKE '%mysql测试'   --不走索引
SELECT * FROM USER WHERE username LIKE '%mysql测试%'  --不走索引

4、数据类型隐式转换,字符串列与数字直接比较,不走索引

-- stock_code字符串类型带索引
SELECT * FROM `stock_data` WHERE stock_code = '600538'  --走索引
SELECT * FROM `stock_data` WHERE stock_code = 600538  --不走索引

5、尽量避免 OR 操作,只要有一个字段没有索引,改语句就不走索引,不走索引!

-- stock_code带索引,open不带索引
SELECT * FROM `stock_data` WHERE `stock_code` = '600538' OR `open` = 6.62  -- 不走索引
-- stock_code带索引,up_down_pre带索引
SELECT * FROM `stock_data` WHERE `stock_code` = '600538' OR `up_down_pre` = 5.1  -- 走索引

6、where id !=2 或者 where id <> 2,不走索引!

SELECT * FROM t_user WHERE username <> 'mysql测试'

7、is null,is not null也无法使用索引,不走索引!

SELECT * FROM t_user WHERE username IS NULL -- 不走索引
SELECT * FROM t_user WHERE username IS NOT NULL -- 不走索引

8、索引列使用 in 语句,可能不走索引

-- stock_code数据类型为varchar
SELECT * FROM `stock_data` WHERE `stock_code` IN ('600538')  -- 走索引
SELECT * FROM `stock_data` WHERE `stock_code` IN ('600538','688663','688280')  -- 走索引
SELECT * FROM `stock_data` WHERE `stock_code` IN (大量数据)  -- 不走索引
SELECT * FROM `stock_data` WHERE `stock_code` IN (600538)  -- 不走索引

mysql哪些查询情况不走索引相关推荐

  1. mysql子查询为什么不走索引_解决MySQL中IN子查询会导致无法使用索引问题

    测试表如下: CREATE TABLE`test_table` ( `id`int(11) NOT NULLAUTO_INCREMENT, `pay_id`int(11) DEFAULT NULL, ...

  2. MySQL like查询后置%索引失效分析

    MySQL like查询后置%索引失效分析 表结构 CREATE TABLE `t_food_shop` (`id` bigint(20) unsigned NOT NULL AUTO_INCREME ...

  3. MySQL索引失效原因,SQL查询语句不走索引原因

    前言 日常工作中索引失效原因很多,这个需要平时的日积月累,不断学习,才能更正确的发挥索引的作用,下面简单总结一些索引失效原因. 1. 隐式的类型转换,索引失效 select * from test w ...

  4. MySQL not exists 真的不走索引么?

    在一些业务场景中,会使用NOT EXISTS语句确保返回数据不存在于特定集合,部分同事会发现NOT EXISTS有些场景性能较差,甚至有些网上谣言说"NOT EXISTS不走索引" ...

  5. Mysql多表关联不走索引的原因

    刚入职第一天,有个大佬写了一个统计函数count(*)需要对两张表a,b做统计.咋一看挺简单的,可是表a有1000万条数据,表b有300万条数据.使用LEFT JOIN进行查询.结果,一直查询不出来, ...

  6. MySQL is null真的不走索引吗?

    MySQL版本5.7 建表 create table staffs( id int primary key auto_increment, name varchar(24) not null defa ...

  7. mysql范围查询如何建索引_MySQL索引(二):建索引的原则

    在了解了索引的基础知识及B+树索引的原理后(如需复习请点这里),这一节我们了解一下有哪些建索引的原则,来指导我们去建索引. 建索引的原则 1. 联合索引 我们可能听一些数据库方面的专业人士说过:&qu ...

  8. MYSQL 中 OR 走不走索引

    目录 添加a.b独立索引 添加a.b组合索引 新建表test01,字段:id.a.b.c 添加a.b独立索引 EXPLAIN SELECT * FROM test01 WHERE a = 1 OR b ...

  9. mysql时间字段不走索引_MySQL使用=或=范围查询时不走索引

    2020-02-27 最近一个日志页面查询很慢,然后去跟踪了查询sql,发现日期字段上即使建了索引,查询还是很慢,执行语句还是使用了全表扫描,于是继续分析下去. 查询语句类似: select * fr ...

最新文章

  1. Don‘t entangle those useless things
  2. SBB:长期施肥降低了控制土壤微生物群落演替的随机性
  3. 深度学习经典案例解析:YOLO系列
  4. sql中小数位四舍五入控制
  5. Go 变量及基本数据类型2
  6. vba根据内容调整word表格_【邮件合并】不会VBA也能批量生成Word封面
  7. docker 返回错误信息与本地不一致_Docker基本配置及常用命令
  8. StereoBM::disp12MaxDiff Crash the Release
  9. php 接口有几种,【后端开辟】php接口有哪些范例?
  10. jquery 选择器 空格、大于、加号、波浪线区别
  11. 高通模式9008模式linux,高通芯片如何进入9008模式深度救砖
  12. 分享一个好用的图吧电脑工具
  13. 网管维修必备工具_7手机维修必备工具
  14. 声音存储空间计算公式_音频数据存储空间计算 音频存储空间计算公式
  15. 基于Tensorflow实现声音分类
  16. 规划--如何成为一名web安全工程师
  17. 大师系列之彼得•林奇基层调查选股法
  18. Java处理敲击键盘事件 Etch-A-Sketch玩具实现 光标画笔画图程序 Java核心技术
  19. Debian添加自启动的两种方式
  20. java 自行车_JAVA 2020款山地车盘点

热门文章

  1. 莫拉蒂接过法切蒂接力棒
  2. 从360看软件产品的大众心理学
  3. CC-IP0101 51410056-175霍尼韦尔接口板
  4. 获取URL中的链接(可中文也可英文)
  5. python 脚本退出
  6. 对抗攻击与防御 (1):图像领域的对抗样本生成
  7. Linux常用命令大全(冰河世纪到现在最全的收集)
  8. apple pencil一代的平替有哪些品牌?平价电容笔推荐
  9. 梯度下降法中为什么梯度的反方向是函数下降最快的方向?
  10. 《初次使用瑞昱 rtl8710 》