首页 > 数据库 >mysql索引

mysql索引

时间:2022-11-04 18:23:51浏览次数:46  
标签:下推 查询 索引 mysql 失效 数据结构 主键

一、索引概念

索引是帮助MySql高效获取数据的数据结构。在数据之外,数据库系统还维护着满足特定查找算法的数据结构,这些数据结构以某种方式引用数据,这样就可以在这些数据结构上实现高级查找算法,这种数据结构就是索引。

二、索引分类

1、主键索引 primary key

 

主键索引是唯一的,通常以表的ID设置为主键索引,一个表只能有一个主键索引,这是他跟唯一索引的区别

2、聚簇索引

由主键或非空唯一索引实现

3、普通索引,非聚簇索引,二级索引

存储索引值和主键值,根据主键从聚簇索引查

4、唯一索引

主要用于业务上的约束,一个表可以有多个唯一索引

5、单列索引

以某一个字段为索引

6、联合索引

两个或两个以上字段联合组成的一个索引,使用时要满足最左匹配原则

最左匹配原则

查询从联合索引的最左列开始,并且不跳过索引中的列

三、覆盖索引

指索引包含了所有需要查询的字段

优点:

1、避免主键索引的二次查询

2、不需要回表查询提升读取数据的性能

四、索引下推

1、索引条件下推(Index Condition Pushdown),简称ICP。MySQL5.6新添加,用于优化数据的查询

2、当你不使用ICP,通过使用非主键索引(普通索引or二级索引)进行查询,存储引擎通过索引检索数据,然后返回给MySQL服务器,服务器再判断是否符合条件

3、使用ICP,当存在索引的列做为判断条件时,MySQL服务器将这一部分判断条件传递给存储引擎,然后存储引擎通过判断索引是否符合MySQL服务器传递的条件,只有当索引符合条件时才会将数据检索出来返回给MySQL服务器

4、应用场景

 

4.1、当需要整表扫描

4.2、适用InnoDB引擎和MyISAM引擎查询(5.6版本不适用分区查询,5.7版本可以用于分区表查询)

 

4.3、nnoDB引擎仅仅适用二级索引。(原因InnoDB聚簇索引将整行数据读到InnoDB缓冲区)。

4.4、子查询条件不能下推。触发条件不能下推,调用存储过程条件不能下推

5、索引下推的命令

set optimizer_switch = "index_condition_pushdown=off"

五、索引失效(模型数空运最快)

1、模,以%开头的like模糊查询

头部模糊查询,索引失效(如果使用覆盖索引,仍然生效)

2、型,数据类型

使用索引时,数据类型错误,索引失效

3、数,函数

对索引的字段使用内部函数,索引失效

4、空,null

索引不存储空值,如果不限制索引not null ,数据库会认为索引列有可能存在空值,所以索引也会失效

5、运,运算

对索引列进行加减乘除运算,索引失效

6、最,最左原则

在复合索引中,索引列的顺序很重要,不能跳过或不明确查询,如果不是按照索引最左列开始查找,索引失效

7、快,比全表扫描更快

如果使用全表扫描比使用索引更快,索引失效

#其他可能出现索引失效的情况
#1、使用范围查询时,右边的列不能用索引
#2、用or分隔的条件,如果or前的条件列有索引,后面列没有索引
#3、使用in或者not in时,in走索引,not in 不走索引

 

标签:下推,查询,索引,mysql,失效,数据结构,主键
From: https://www.cnblogs.com/songyunjie/p/16858708.html

相关文章

  • MySQL---索引的数据结构
    索引的数据结构为什么使用索引索引及其优缺点概述优点缺点InNoDB中索引的推演索引之前的查找在一个页......
  • mysql连接超时的属性设置
    mysql连接超时的属性设置2022-10-2611:09:54.128[http-nio-6788-exec-5]ERRORo.s.t.i.TransactionAspectSupport#completeTransactionAfterThrowing[line:525]-App......
  • ContOS操作MySQL的基本操作
    一.安装MySQL安装mysqlyuminstall-ymysql-server设置开机自动启动systemctlenablemysqld.service检查开机自动启动是否设置成功systemctllist-unit-files|gre......
  • mysql锁
    一、全局锁全局锁就是对整个数据库实例加锁。MySQL提供了一个加全局读锁的方法,命令是 #全局锁Flushtableswithreadlock 当需要让整个库处于只读状态的时候,可......
  • MySQL函数-Group_Concat分组并行转列
    group_concat函数解析:1、concat()函数:  功能:将多个字符串连接成一个字符串  语法:concat(str1,str2)  结果:连接参数str1,str2为一个字符串,如果有任何一个参数为n......
  • Windows Server 2016部署MySQL 8.0 MGR
    环境介绍操作系统IP主机名MySQL版本WindowsServer2016192.168.1.91db18.0.31WindowsServer2016192.168.1.92db28.0.31WindowsServer2016192.......
  • MySQL---存储引擎
    存储引擎查看存储引擎设置DBMS默认存储引擎设置表的存储引擎创建表时指定存储引擎修改表时指定存储引擎存储引擎介绍......
  • MYSQL数据备份之mysqldump命令详解
    一、mysqldump简介mysqldump是MySQL自带的逻辑备份工具。它的备份原理是通过协议连接到MySQL数据库,将需要备份的数据查询出来,将查询出的数据转换成对应的insert语......
  • mysql 5 和 8 连接配置
    前言:mysql目前最常用的就是5和8两个版本,但连接配置有一些区别,以下列出两个模板备用mysql5连接配置spring:datasource:driver-class-name:com.mysql.jd......
  • 学习笔记-mysql
    mysqlmy.cnf配置文件port=3309socket=/usr/local/mysql/tmp/mysql.sock[mysqld]#服务器端配置!include/usr/local/mysql/etc/mysqld.......