mysql 索引(2)(索引失效的问题及解决)
mysql索引优化
- 索引优化
索引优化
# 创建表 和数据
create table IF NOT EXISTS staffs(
id int primary key auto_increment,
`NAME` varchar(24) not null default '' COMMENT'姓名',
age int not null default 0 COMMENT'年龄',
pos varchar(24) not null default '' COMMENT'职位',
add_time TIMESTAMP not null default CURRENT_TIMESTAMP COMMENT'入职时间'
);insert into staffs(`NAME`,age,pos,add_time) values('z3',22,'manager',NOW());insert into staffs(`NAME`,age,pos,add_time) values('judy',22,'dev',NOW());insert into staffs(`NAME`,age,pos,add_time) values('gc',22,'dev',NOW());# 添加索引
alter table staffs add index idx(name , age,pos);
分析该数据列:
explain select * from staffs where name
= ‘z3’ and age
= ‘z3’ and pos = ‘123’
explain select * from staffs where name
= ‘z3’
explain select * from staffs where name
= ‘z3’ and pos = ‘123’
explain select * from staffs where age
= ‘z3’ and pos = ‘123’
1,复合索引,需要按照建索引的顺序列查询,如果中间去掉了一列后,则后面的索引会失效,如果第一列索引都不匹配,则索引全失效
explain select * from staffs where name
= ‘z3’
explain select * from staffs where left(name
,4) = ‘z3’
2,在索引列上做任何操作(计算,函数、(自动或手动)的类型转换),会导致索引失效而转向全表的扫描
explain select * from staffs where name
= ‘z3’ and age
> ‘3’ and pos = ‘123’
3,存储引擎不能使用索引中范围条件右边的列(也就是范围条件后面的索引会失效)
explain select name
,age,pos from staffs where name
= ‘z3’ and age
= ‘3’ and pos = ‘123’
4,尽量使用覆盖索引(只访问索引列上存在的字段),减少select * 的查询(同时如果此时以3的示例,效率也会更高)
explain select * from staffs where name
<> ‘z3’
5,mysql在使用不等号(!= 或 <>) 的时候,会导致无法使用索引会导致全表扫描(但是 select 索引列 from … 不会导致索引失效,因为用到覆盖索引了)
explain select * from staffs where name
is null
explain select * from staffs where name
is not null
6,is null 或 is not null 也无法使用索引
explain select * from staffs where name
like ‘judy%’
explain select * from staffs where name
like ‘%judy%’
explain select * from staffs where name
like ‘%judy’
like 百分号最好放右边,才会避免索引失效,且后面的索引也不会失效
那么如果愣头轻,两遍都要百分号怎么办
explain select name
from staffs where name
like ‘%judy%’
7,两遍百分号,查询字段如果是覆盖索引,那么索引页不会失效了
explain select * from staffs where name
= ‘33’
explain select * from staffs where name
= 33
8,字符串查询不加单引号索引会失效(同时也就是2演示所说,(自动或手动)的类型转换)
explain select * from staffs where name
= ‘33’ or name
= ‘123’
9,少用or,用它连接的时候索引会失效
mysql 索引(2)(索引失效的问题及解决)相关推荐
- mysql 加索引不起作用_mysql加索引及索引失效的情况
前言:B+TREE索引的本质是多路绝对平衡查找树,磁盘指针,相当于书的目录,索引不是越多越好. 一:如何加索引 1.PRIMARY KEY(主键索引) mysql>ALTER TABLE ...
- mysql left join 索引失效_MySQL索引列上做操作导致索引失效案例分析
索引列上做操作导致索引失效 通常我们认为只要建立索引就可以万事大吉,以为只要建立就一定会使用到,可其实在索引列上的计算.函数.类型转换都可能导致索引失效,所以我们不仅要会创建索引,更重要的是如何正确的 ...
- MySQL索引原理、失效情况
声明:本文是小编在学习过程中,东拼西凑整理,如有雷同,纯属借鉴. Mysql5.7的版本, InnoDB引擎 目录 1 mysql索引知识 1.1 B+Tree索引 1.2 主键索引和普通索引的区别 ...
- mysql模糊查询索引失效_MySql学习笔记(九):索引失效
数据准备:CREATE TABLE `t_blog` ( `id` int(11) NOT NULL auto_increment, `title` varchar(50) default NULL, ...
- MySQL高级:索引优化之防止索引失效
前言:数据库索引优化,但是可能出现索引失效,我们该怎样防止这种情况发生呢>> 文章目录 1. 案例建表: 1.1 staffs表 1.2 建立索引: 2.案例:索引失效 2.1 全面匹配索 ...
- mysql 子查询索引失效_mysql 索引失效的情况
索引失效的几种情况 1.如果条件中有or,即使其中有条件带索引也不会使用(这也是为什么尽量少用or的原因) 要想使用or,又想让索引生效,只能将or条件中的每个列都加上索引 2.对于多列索引,不是使用 ...
- 文件服务器索引失效,SQL优化 MySQL版 – 避免索引失效原则(一)
避免索引失效原则(一) 精力有限,剩余的失效原则将会在 <避免索引失效原则(二)>中连载出来,请谅解 作者 : Stanley 罗昊 [转载请注明出处和署名,谢谢!] 避免索引失效的一些原 ...
- mysql自动无序索引_SQL优化 MySQL版 - 避免索引失效原则(一)
作者 : Stanley 罗昊 避免索引失效的一些原则 我们编写SQL语句后会进行添加一些索引进行优化,但是有时候确实建了索引,但索引有时候会失效: 比如在模糊查询使用 in 关键字的时候索引就失效了 ...
- mysql行锁索引问题_Mysql锁机制--索引失效导致行锁变表锁
=============== Tips:在阅读本文前,最好先阅读 这篇(Mysql锁机制--行锁)文章~ 在上篇文章中,我们看到InnoDB默认的行锁可以使得操作不同行时不会产生相互影响.不会阻塞, ...
最新文章
- 《深入理解Nginx》阅读与实践(四):简单的HTTP过滤模块
- 人工智能实战_第七次作业_杨佳宁(2)
- 辅助类BinaryTreeNodeLeftChildRightSibling(左孩子右兄弟,二叉树结点)
- 阿里云数据中台助力零售耐消品新客获取与转化
- 360浏览器设置多标签操作步骤
- limit offset
- python 线性规划问题_使用Python进行线性规划示例
- 如何绘制高大上的词云图?
- type python django models_Python菜鸟之路:Django ModelForm的使用
- Atitit 图像处理的摩西五经attilax总结
- JavaWeb9大内置对象的作用与作用域
- xp安装python3.4_32位XP系统 Python3.4.4安装scrapy1.6.0
- 2021国赛数学建模赛题与分析
- 文献检索——Web of Science|CSDN创作打卡
- mumu显示连接服务器超时,网易mumu模拟器安装不了 网易mumu模拟器安装好久解决方法...
- 【UE4】Object has overlapping UVs不借助外部软件就能解决的方法
- dateadd函数转成oracle,oracle dateadd函数
- 物联网毕业设计-选题推荐
- activiti-流程变量
- 掏心掏肺分享,大学四年我是怎么学操作系统和计算机网络的?