首页 > 数据库 >Mysql-索引

Mysql-索引

时间:2024-03-08 11:00:12浏览次数:27  
标签:优先级 Tree 查询 索引 key Mysql 主键

  1. 主键索引:表的主键为 B+Tree 的 key。
  2. 二级索引:二级索引的 value 是表的主键,这样做的好处是 B+Tree 的节点小,可以一次放入更多节点到内存,减少 IO 次数。缺点是需要回表:通过二级索引查到的主键,再去主键索引查需要的信息。
  3. 聚簇索引:索引结构和数据一起存放的索引InnoDB 中的主键索引就属于聚簇索引。优点:不需要回表。
  4. 非聚簇索引:索引结构和数据分开存放的索引
  5. 覆盖索引:在二级索引就可以查询到用户所要的数据的索引,不需要回表
  6. 联合索引:使用表中多个字段建立的索引。

最左匹配原则

联合索引中按照左边优先的顺序进行匹配,直到遇到第一个范围查询,其后边的 key 不再使用联合索引。因为优先级较高的 key 相等的情况下,优先级低的 key 才是局部有序的,当优先级较高的 key 是范围查询(>或<),优先级低的 key 是无序的,不能使用 B+Tree 查询。需要注意的是当高优先级 key 为前缀查询:">="、"<="、"bettwen and" 和 "like" 时,并不会停止匹配,低优先级的key 会用到联合索引,因为这三个范围查询都包含了高优先级的等值查询,在这个等值查询里,低优先级的 key 是有序的

note:测试了高优先级用 "in" 查询也不会导致后边的key 停止匹配。

索引失效

  • 左模糊匹配 like %xx
  • 对索引列做了计算
  • 正确的最左匹配原则
  • 在 WHERE 子句中,如果在 OR 前的条件列是索引列,而在 OR 后的条件列不是索引列,那么索引会失效。

标签:优先级,Tree,查询,索引,key,Mysql,主键
From: https://www.cnblogs.com/hellozhangjz/p/18060530

相关文章

  • MySQL Server架构概述
    推荐:SQL语句执行顺序相关问题。MySQLServer架构分层概述MySQLServer架构可抽象为3层。连接层:验证用户名密码,认证成功后,获取当前账号的权限并缓存,并分配TCP连接池和线程池资源。处理层:实现核心的处理功能。存储层:将处理后的数据高性能安全的写入磁盘,或从磁盘中正确的读取......
  • MySQL的页与行格式
    什么是MySQL的页?页是指存储引擎使用的最小的数据存储单位。当MySQL执行读取或写入操作时,是以页为基本单位来进行操作的。即使读写一条数据,MySQL也会按页操作。MySQL的存储引擎会将数据分成多个页,并根据需要将这些页加载到内存中进行处理。通过使用页来组织数据,MySQL能够......
  • MYSQL学习笔记1: DDL的库表操作
    SQL语句分类DDL数据定义语言,用来定义数据库对象(数据库,表,字段)DML数据操作语言,用来对数据库中表的数据进行增删改DQL数据库查询语言,用于查询数据库中表的记录DCL数据控制语言,用来创建数据库用户、控制数据库的访问权限DDL数据定义语言,用来定义数据库对象(数据......
  • Docker搭建Mysql集群
    一、新建主服务器示例3307dockerrun-p3307:3306--namemysql-master\-v/docker-volume/mysql-master/log:/var/log/mysql\-v/docker-volume/mysql-master/data:/var/lib/mysql\-v/docker-volume/mysql-master/conf:/etc/mysql\-eMYSQL_ROOT_PASSWORD=root\-d......
  • MySQL-01.Linux下MySQL安装和使用
    C-01.Linux下MySQL的安装和使用前置说明,MySQL高级部分,需要前置知识,为Linux操作系统。如果没有该部分知识,这里推荐韩顺平老师的Linux操作系统的教程。韩老师Linux教程1.安装前准备1.1Linux系统及工具的准备安装并启动好两台虚拟机:CentOS7版本掌握克隆虚拟机的操作mac地......
  • MYSQL意向锁的作用
    结论:当一个事务要对表进行锁定时,首先会获取相应的意向锁。其他事务可以通过检查意向锁来判断是否有其他事务在更细粒度的级别上对表进行了锁定。这有助于避免冲突和提高并发性能在讨论此问题之前我们应当明确两个前提:Innodb存储引擎支持行锁和表锁共存行锁与表锁之间互不冲突......
  • MySQL8.0.21安装初始化失败
    情况说明:安装到最后一步第三个“Initializedatabase(maytakealongtime)”打叉,“Log”中存在“mysqld:File'.\鐜嬫旦鐒?bin.index'notfound(OSerrno2-Nosuchfileordirectory)”,已退出安装程序。问题分析:如果是第一次安装,问题在主机名称是中文;如果曾退出安装,问题......
  • mysql.h学习记录
    目录简介简介mysql.h是MySQLCAPI的主要头文件,它为C开发者提供了一套函数和定义,以与MySQL服务器交互。这些函数和定义使得开发者能够编写应用程序,实现与MySQL服务器的连接、执行查询、检索结果等操作。以下是一些常见的函数及其在mysql.h中的简要介绍:连接和关......
  • MySQL 的 datetime 日期类型,以当前时间作为初始默认值
     1.以当前时间作为默认值使用DEFAULTCURRENT_TIMESTAMP声明字段,插入记录时不用指定dt,自动置入当前时间CREATETABLEt1(dtDATETIMEDEFAULTCURRENT_TIMESTAMP); 2.以当前时间作为默认值以及更新值使用ONUPDATECURRENT_TIMESTAMP声明字段,修改记录时dt自......
  • Kibana8.0怎么添加索引index至discover
    ELK7版本索引输入至elasticsearch后使用CreateIndexpattern添加索引至Kibana在ELK8版本添加方式有所不同左侧菜单选择Management选择Kibana-DataViews创建dataview查看Discover选择刚刚设置的索引名即可......