MySQL中为避免索引失效所需注意的问题
一、索引介绍

二、索引的优势与劣势
1、优势
- 类似于书籍的目录索引,提高数据检索的效率,降低数据库的IO成本。
- 通过索引列对数据进行排序,降低数据排序的成本,降低CPU的消耗。
2、劣势
- 实际上索引也是一张表,该表中保存了主键与索引字段,并指向实体类的记录,所以索引列也是要占用空间 的。
- 虽然索引大大提高了查询效率,同时却也降低更新表的速度,如对表进行INSERT、UPDATE、DELETE。因为 更新表时,MySQL 不仅要保存数据,还要保存一下索引文件每次更新添加了索引列的字段,都会调整因为更新所带来的键值变化后的索引信
三、准备环境

四、避免索引失效的注意点
1、全值匹配
全值匹配 ,对索引中所有列都指定具体值。该情况下,索引生效,执行效率高。

2、最左前缀法则
如果索引了多列,要遵守左前缀法则。指的是查询从索引的左前列开始,并且不跳过索引中的列。
创建索引的方式:

Ⅰ、匹配最左前缀法则,走索引

Ⅱ、违背最左前缀法则,索引失效

Ⅲ、如果符合最左前缀法则,但是出现跳跃某一列,则只有左列索引生效

3、范围查询右边的列,不能使用索引
如下,范围查询之后的address没有使用索引

4、不要在索引列上进行运算操作,索引将失效

5、字符串不加单引号,造成索引失效
由于,在查询时,没有对字符串加单引号,MySQL的查询优化器,会自动的进行类型转换,造成索引失效。

6、尽量使用覆盖索引,避免select *


7、or前面的列有索引,后面没有,那么索引不会被使用
示例,name 字段是索引列 , 而 createtime 不是索引列,中间是 or 进行连接是不走索引的 :

8、以%开头的like模糊查询,索引失效
如果仅仅是尾部模糊匹配,索引不会失效。如果是头部模糊匹配,索引失效。

解决方案:覆盖索引

9、如果mysql评估使用索引比全表更慢,则不使用索引

10、is NULL,is not NULL有时索引失效

这里索引失效的原因其实就是上面的第九条
11、in 走索引, not in 索引失效。

12、尽量使用复合索引,而少使用单列索引 。

2020-9-6
MySQL中为避免索引失效所需注意的问题的更多相关文章
- MySQL中的联合索引学习教程
		MySQL中的联合索引学习教程 这篇文章主要介绍了MySQL中的联合索引学习教程,其中谈到了联合索引对排序的优化等知识点,需要的朋友可以参考下 联合索引又叫复合索引.对于复合索引:Mysql从左到 ... 
- 面试官:为什么Mysql中Innodb的索引结构采取B+树?
		前言 如果面试官问的是,为什么Mysql中Innodb的索引结构采取B+树?这个问题时,给自己留一条后路,不要把B树喷的一文不值.因为网上有些答案是说,B树不适合做文件存储系统的索引结构.如果按照那种 ... 
- 高性能MySQL中的三星索引
		高性能MySQL中的三星索引 我对此提出了深深的疑问: 一星:相关的记录指的是什么??(相关这个词很深奥,“相关部门”是什么部门) 二星:如果建立了B-Tree(B+Tree)索引,数据就有序了.三星 ... 
- MySQL中的聚集索引和辅助索引
		MySQL中的聚集索引和辅助索引 当你定义一个主键时,innodb存储引擎就把他当做聚集索引 如果你没有定义一个主键,则innodb定位到第一个唯一索引,且改索引的所有列值均为非空,就将其当做聚集索引 ... 
- 《MySQL实战45讲》学习笔记4——MySQL中InnoDB的索引
		索引是在存储引擎层实现的,且在 MySQL 不同存储引擎中的实现也不同,本篇文章介绍的是 MySQL 的 InnoDB 的索引. 下文将以这张表为例开展. # 创建一个主键为 id 的表,表中有字段 ... 
- MySQL优化之避免索引失效的方法
		在上一篇文章中,通过分析执行计划的字段说明,大体说了一下索引优化过程中的一些注意点,那么如何才能避免索引失效呢?本篇文章将来讨论这个问题. 避免索引失效的常见方法 1.对于复合索引的使用,应按照索引建 ... 
- 为什么MySQL字符串不加引号索引失效?《死磕MySQL系列 十一》
		群里一个小伙伴在问为什么MySQL字符串不加单引号会导致索引失效,这个问题估计很多人都知道答案.没错,是因为MySQL内部进行了隐式转换. 本期文章就聊聊什么是隐式转换,为什么会发生隐式转换. 系列文 ... 
- 如何检查mysql中建立的索引是否生效的检测方法及相关参数说明
		所使用的mysql函数explain语法:explain < table_name >例如: explain select * from t3 where id=3952602;expla ... 
- MYSQL中的普通索引,主健,唯一,全文索引区别
		MYSQL索引用来快速地寻找那些具有特定值的记录,所有MySQL索引都以B-树的形式保存.如果没有索引,执行查询时MySQL必须从第一个记录开始扫描整个表的所有记录,直至找到符合要求的记录.表里面的记 ... 
随机推荐
- 【Spring】创建一个Spring的入门程序
			3.创建一个Spring的入门程序 简单记录 - Java EE企业级应用开发教程(Spring+Spring MVC+MyBatis)- Spring的基本应用 Spring与Spring MVC的 ... 
- XEE - Pikachu
			概述 XXE -"xml external entity injection"既"xml外部实体注入漏洞".概括一下就是"攻击者通过向服务器注入指定的 ... 
- 二十五:XSS跨站值原理分类及攻击手法
			HTML DOM树 XSS跨站产生原理,危害,特点 本质,产生层面,函数类,漏洞操作对应层,危害影响,浏览器内核版本 XSS是什么? XSS全称跨站脚本(Cross Site Scripting),为 ... 
- [Usaco2016 Dec]Counting Haybales
			原题链接https://www.lydsy.com/JudgeOnline/problem.php?id=4747 先将原数组排序,然后二分查找即可.时间复杂度\(O((N+Q)logN)\). #i ... 
- (05)-Python3之--运算符操作
			1.算数运算 num_a = 100 num_b = 5000 # 加法 + print(num_a + num_b) # 减法 - print(num_a - num_b) # 乘法 * print ... 
- jmeter的线程数,并发用户数,TPS,RPS 关系解说
			背景 在做性能测试的时候,传统方式都是用并发虚拟用户数来衡量系统的性能(站在客户端视角),一般适用于一些网页站点例如首页.H5的压测:而RPS(Requests per second)模式主要是为了方 ... 
- Spring AOP介绍与使用
			Spring AOP介绍与使用 AOP:Aspect Oriented Programming 面向切面编程 OOP:Object Oriented Programming 面向对象编程  面向切面 ... 
- 订单业务楼层化 view管理器和model管理器进行了model和view的全面封装处理  三端不得不在每个业务入口上线时约定好降级开关,于是代码中充满了各种各样的降级开关字段
			京东APP订单业务楼层化技术实践解密 原创 杜丹 留成 博侃 京东零售技术 2020-09-29 https://mp.weixin.qq.com/s/2oExMjh70Kyveiwh8wOBVA 用 ... 
- 一、JavaScript实现AJAX(只需四步)
			-----------------------------------------------一.JavaScript实现AJAX(只需四步)----------------------------- ... 
- linux上jar项目启动脚本
			---------------启动:start.sh #!/bin/bashcd `dirname $0`BIN_DIR=`pwd`cd ..DEPLOY_DIR=`pwd`CONF_DIR=$DEP ... 
