首页 > 数据库 >MySQL中使用范围查询后索引失效问题

MySQL中使用范围查询后索引失效问题

时间:2023-11-17 11:35:23浏览次数:35  
标签:MySQL 查询 索引 四条 过滤 table 失效 数据

假设我们为表table的a,b,c三列创建了联合索引create index idx_a_b_c on table(a,b,c),并且在B+树中,数据的存储顺序如下:

(a=1 b=1 c=1) (a=1 b=2 c=1) (a=1 b=2 c=3)
(a=2 b=2 c=3) (a=2 b=2 c=5) (a=2 b=5 c=1) (a=2 b=5 c=2)
(a=3 b=0 c=1) (a=3 b=3 c=5) (a=3 b=8 c=6)

使用查询语句select a,b,c from table where a = 2 and b = 5 and c = 2,首先依据a=2,过滤出四条数据: (a=2 b=2 c=3) (a=2 b=2 c=5) (a=2 b=5 c=1) (a=2 b=5 c=2),此时这四条数据按b列排列是有序的,再按照b=5过滤出两条数据:(a=2 b=5 c=1) (a=2 b=5 c=2),此时这两条数据按照c列排列是有序的,最后再按照c=2的过滤,得到最终的结果 (a=2 b=5 c=2)
使用查询语句select a,b,c from table where a = 2 and b > 1 and c = 2,首先依据a=2,过滤出四条数据: (a=2 b=2 c=3) (a=2 b=2 c=5) (a=2 b=5 c=1) (a=2 b=5 c=2),此时这四条数据按b列排列是有序的,再按照b>1过滤出四条数据:(a=2 b=2 c=3) (a=2 b=2 c=5) (a=2 b=5 c=1) (a=2 b=5 c=2),此时这四条数据按照c列排列是无序的,所以无法使用索引进行查找。

总上,在使用联合索引的查询中,如果有一列进行了范围查询,那它后边的索引列就不会生效。所以再创建索引时,最好把要使用范围查询的索引列放在最后。

标签:MySQL,查询,索引,四条,过滤,table,失效,数据
From: https://www.cnblogs.com/rockdow/p/17838266.html

相关文章

  • MySQL高阶知识点(三):吃透索引【转】
    接着之前总结的:索引概述入门,今天全面讲述一下索引相关知识点1.数据库索引是什么?有什么优缺点?索引是一种能提高数据库查询效率的有序的数据结构。它可以比作一本字典的目录,可以帮你快速找到对应的记录。索引一般存储在磁盘的文件中,它是占用物理空间的。其优缺点如下:优点:加快数......
  • MySQL学习
    cmd打开MySQL:mysql-uroot-pDDL(DataDefinitionLanguage数据定义语言):-数据库操作:查询所有数据库:showdatabases;查询当前数据库:selectdatabase();创建数据库:createdatabase[ifnotexists]数据库名[defaultcharset字符集][collate排序规则];删除数据库:dropdataba......
  • 关于MySQL的一些不常用知识及易错总结
    关于用户当我们刚刚登入数据库时,一般是用root用户登录,然后可以用root用户创建普通用户。注意,此处有权限限制,一般用户无法创建特殊或高权限用户,如root用户。创建用户:createuser'user01'@'localhost'identifiedby'user01';createuser'user01'@'%'identifiedby'user0......
  • MySQL数据库高并发优化配置
    在Apache,PHP,mysql的体系架构中,MySQL对于性能的影响最大,也是关键的核心部分。对于Discuz!论坛程序也是如此,MySQL的设置是否合理优化,直接影响到论坛的速度和承载量!同时,MySQL也是优化难度最大的一个部分,不但需要理解一些MySQL专业知识,同时还需要长时间的观察统计并且根据经验进......
  • C#使用SqlSugar操作MySQL数据库实现简单的增删改查
    ......
  • Ubuntu 22.04 LTS 安装最新稳定版本nginx、mysql5.7和php7.2
    Ubuntu22.04LTS安装最新稳定版本nginx、mysql5.7和php7.2全部apt-get安装,就是快,迅速。前提是需要在有网络环境的情况下哈!!操作系统版本:Ubuntu22.04LTS一、安装最新稳定版本的nginxapt-getupdate#查看默认安装的nginx版本(默认为1.18。有点老,我们安装最新稳定版本)apt......
  • Navicat设置MySQL某用户只可访问特定数据库或表
    概述项目中需要将数据库中某些表对其他系统开放,故需设置数据库的访问权限,使得某用户只能访问指定的表。MySQL提供了相关的SQL语句,但本次使用Navicat以可视化方式进行配置。方法1、新建用户2、设置权限(1)服务器权限全不勾选(2)权限权限用于设置该用户可操作哪些数据库或表,且可设置操作......
  • 源码安装MySQL
    本文使用的Linux发行版本为AnolisOS8.864位。最后更新时间2023年11月16日本文安装的MySQL版本为8.1.0,其他版本方法类似。准备工作更新系统。yum-yupdate安装依赖。yuminstall-ygccgcc-c++cmakecmake3ncursesncurses-develbisonopensslopenssl-develg......
  • MySQL5.7双主安装
    214、215 两台服务器1.下载MySQL安装包https://cdn.mysql.com/archives/mysql-5.7/mysql-5.7.43-linux-glibc2.12-x86_64.tar.gz2.上传至服务器并解压./bin/mysqld--initialize--user=mysql--basedir=/usr/local/mysql--datadir=/data/mysql/data3.配置文件/etc/my......
  • mysql单点多实例部署方式
    一、清理环境清理方式与mysql-部署相同二、部署1.创建mysql目录mkdir/root/softcd/root/soft2.下载安装包并解压wgethttps://cdn.mysql.com/archives/mysql-5.7/mysql-5.7.28-linux-glibc2.12-x86_64.tar.gztar-xfmysql-5.7.28-linux-glibc2.12-x86_64.tar.gz-C/o......