mysql哪些查询情况不走索引
在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哪些查询情况不走索引相关推荐
- mysql子查询为什么不走索引_解决MySQL中IN子查询会导致无法使用索引问题
测试表如下: CREATE TABLE`test_table` ( `id`int(11) NOT NULLAUTO_INCREMENT, `pay_id`int(11) DEFAULT NULL, ...
- MySQL like查询后置%索引失效分析
MySQL like查询后置%索引失效分析 表结构 CREATE TABLE `t_food_shop` (`id` bigint(20) unsigned NOT NULL AUTO_INCREME ...
- MySQL索引失效原因,SQL查询语句不走索引原因
前言 日常工作中索引失效原因很多,这个需要平时的日积月累,不断学习,才能更正确的发挥索引的作用,下面简单总结一些索引失效原因. 1. 隐式的类型转换,索引失效 select * from test w ...
- MySQL not exists 真的不走索引么?
在一些业务场景中,会使用NOT EXISTS语句确保返回数据不存在于特定集合,部分同事会发现NOT EXISTS有些场景性能较差,甚至有些网上谣言说"NOT EXISTS不走索引" ...
- Mysql多表关联不走索引的原因
刚入职第一天,有个大佬写了一个统计函数count(*)需要对两张表a,b做统计.咋一看挺简单的,可是表a有1000万条数据,表b有300万条数据.使用LEFT JOIN进行查询.结果,一直查询不出来, ...
- MySQL is null真的不走索引吗?
MySQL版本5.7 建表 create table staffs( id int primary key auto_increment, name varchar(24) not null defa ...
- mysql范围查询如何建索引_MySQL索引(二):建索引的原则
在了解了索引的基础知识及B+树索引的原理后(如需复习请点这里),这一节我们了解一下有哪些建索引的原则,来指导我们去建索引. 建索引的原则 1. 联合索引 我们可能听一些数据库方面的专业人士说过:&qu ...
- MYSQL 中 OR 走不走索引
目录 添加a.b独立索引 添加a.b组合索引 新建表test01,字段:id.a.b.c 添加a.b独立索引 EXPLAIN SELECT * FROM test01 WHERE a = 1 OR b ...
- mysql时间字段不走索引_MySQL使用=或=范围查询时不走索引
2020-02-27 最近一个日志页面查询很慢,然后去跟踪了查询sql,发现日期字段上即使建了索引,查询还是很慢,执行语句还是使用了全表扫描,于是继续分析下去. 查询语句类似: select * fr ...
最新文章
- Don‘t entangle those useless things
- SBB:长期施肥降低了控制土壤微生物群落演替的随机性
- 深度学习经典案例解析:YOLO系列
- sql中小数位四舍五入控制
- Go 变量及基本数据类型2
- vba根据内容调整word表格_【邮件合并】不会VBA也能批量生成Word封面
- docker 返回错误信息与本地不一致_Docker基本配置及常用命令
- StereoBM::disp12MaxDiff Crash the Release
- php 接口有几种,【后端开辟】php接口有哪些范例?
- jquery 选择器 空格、大于、加号、波浪线区别
- 高通模式9008模式linux,高通芯片如何进入9008模式深度救砖
- 分享一个好用的图吧电脑工具
- 网管维修必备工具_7手机维修必备工具
- 声音存储空间计算公式_音频数据存储空间计算 音频存储空间计算公式
- 基于Tensorflow实现声音分类
- 规划--如何成为一名web安全工程师
- 大师系列之彼得•林奇基层调查选股法
- Java处理敲击键盘事件 Etch-A-Sketch玩具实现 光标画笔画图程序 Java核心技术
- Debian添加自启动的两种方式
- java 自行车_JAVA 2020款山地车盘点