数据库建立组合索引时应该遵循的规则, 精确查找先,范围查找后,尽管区分度高
建组合索引的时候,区分度最高的在最左边。
正例:如果 where a=? and b=? ,a 列的几乎接近于唯一值,那么只需要单建 idx_a 索引即
可。
说明:存在非等号和等号混合判断条件时,在建索引时,请把等号条件的列前置。如:where a>?
and b=? 那么即使 a 的区分度更高,也必须把 b 放在索引的最前列。
区分度是什么
首先,组合索引指的是将多个列组合在一起形成的索引,用于加快查询速度。在建立组合索引时,应该将区分度最高的列放在索引的最左边。
区分度是指该列上不同值的数量占该列总值数量的比例。区分度越高,表示该列对于查询过滤的效果越好,因为它可以帮助缩小查询范围。因此,将区分度最高的列放在索引的最左边,可以使查询更快地命中索引,提高查询效率。
等号条件的列放在最左边
其次,如果查询中包含等号条件和不等号条件混合的情况,应该将等号条件的列放在索引的最左边。因为等号条件只需要精确匹配,而不等号条件需要匹配一定的范围,所以将等号条件的列放在最左边可以更快地缩小查询范围。
例如,当查询条件为 WHERE a=? AND b=?
时,如果列 a 的区分度几乎接近于唯一值,那么只需要单建 idx_a
索引即可。而当查询条件为 WHERE a>? AND b=?
时,虽然列 a 的区分度更高,但由于存在不等号条件,应该将列 b 放在索引的最左边。
总之,建立组合索引时应该优先考虑区分度最高的列,同时应该将等号条件的列放在索引的最左边,以提高查询效率。
mysql 建立组合索引
在 MySQL 中,可以使用 CREATE INDEX
语句来创建组合索引。组合索引也称为联合索引,它是一种包含多个列的索引。与单列索引不同,组合索引可以根据多个列的值来快速定位数据,从而提高查询效率。
下面是一个示例 SQL 语句,演示如何创建一个组合索引:
CREATE INDEX idx_name_age ON my_table (name, age);
在上面的示例中,我们创建了一个名为 idx_name_age
的组合索引,它包含了 my_table
表中的 name
和 age
两个列。通过这个组合索引,可以根据 name
和 age
的值来快速定位数据。
总结
创建组合索引时需要考虑列的顺序。如果需要根据某个列进行精确匹配,那么应该将这个列放在索引的最前面;如果需要根据多个列进行排序或者范围查询,那么应该将这些列放在索引的后面。此外,组合索引的列数应该尽可能少,否则可能会影响索引的效率和性能。
数据库建立组合索引时应该遵循的规则, 精确查找先,范围查找后,尽管区分度高相关推荐
- mysql中组合索引创建的原则是什么意思_mysql数据库建立组合索引原则
现实中,mysql可以根据业务需要建立组合索引,由于mysql使用B-Tree格式索引,可以直接定位记录,无需扫描.mysql建立多列索引有最左前缀的原则,即最左优先,如: 如果有一个2列的索引(co ...
- 创建组合索引时,索引列顺序的选择
在创建组合索引时,网上一般的说法会提到:查询时where条件中的列的顺序要和创建索引时列的顺序保持一致,否则组合索引会失效. 更进一步来说,组合索引的各个列中,到底谁应该在前,谁应该在后,还是说创建时 ...
- 建立组合索引的字段顺序优化
建立组合索引的字段顺序优化 简介 组合索引我们经常用到,建立组合索引大家也都会,但是如何考虑建立组合索引的顺序是一个值得推敲的事情. 正文 1. 尽量把最常用的字段放在最前面 对于我们需要创建的组合索 ...
- 建立表/索引时的 存储参数:【PCTUSED参数与PCTFREE参数】
PCTFREE.PCTUSED.FREELIST的关系和应用 概念: pctused:一个块的使用水位的百分比,这个水位将使该块返回到可用列表中去等待更多的插入操作. pctfree:用来为一个块 ...
- 添加组合索引时,做相等运算字段应该放在最前面
有一个通常的误解,觉得应该把选择性高的字段放在最前面,这通常只是针对一个字段的索引,对于组合索引,常常要把做等式运算的字段放在最前面,看看测试 USE AdventureWorks GOCREATE ...
- mysql怎么建组合索引_mysql索引及建立组合索引原则
两个重要概念 1.对于mysql来说,一条sql中,一个表无论其蕴含的索引有多少,但是有且只用一条. 2.对于多列索引来说(a,b,c)其相当于3个索引(a),(a,b),(a,b,c)3个索引,又由 ...
- mysql 索引不重复的值,【锁】在数据库无法使用唯一索引时如何保证数据的不重复?...
前言 之前数据库的用户表的用户名.手机号码.邮箱都是设置了唯一索引,因此不需要考虑重复的问题.然而,由于手机号码和邮箱都可以为 null,而太多的 null 会影响索引的稳定性,因此去掉唯一索引并将默 ...
- MySQL组合索引(多列索引)使用与优化
一.多列索引 我们经常听到一些人说"把WHERE条件里的列都加上索引",其实这个建议非常错误.在多个列上建立单独的索引大部分情况下并不能提高MySQL的查询性能.MySQL在5.0 ...
- mysql组合索引 唯一_(四):MySQL建立索引,唯一索引和组合索引
# (四):MySQL建立索引,唯一索引和组合索引 先大致介绍下项目的数据库信息. 数据库A:主要存放的通用的表,如User.Project.Report等. 数据库B.C.D:一个项目对应一个数据库 ...
最新文章
- DBCC CHECKIDENT
- DOM 之通俗易懂讲解
- python如何将视频流实时传输到手机?(有问题,一次只能被一台访问)
- http并发,操作系统如何识别对应的进程,线程请求
- html 和jsp 引入jquery_不用jsp怎么实现前后端交互?给萌新后端的ajax教程(1)
- MATLAB软件禁用利好,Matlab被禁用?一款国产软件站了出来说:我就是中国的Matlab...
- tkmybatis 子查询_你的名字是爆款吗?一键查询!看看在杭州、全国多少人和你同名!...
- 一段JS代码实现光标定位输入框文字最后
- python的全局变量和局部变量
- COGS 2507 零食店
- 安装虚拟光驱Daemon Tool 安装失败
- xshell官网最新 中文,xshell
- Linux+Nginx+SpringBoot+War环境下websocket部署遇到的问题
- [GOM引擎]假人配置的脚本设置方法
- 【190302】VC+ 视频捕捉与录像+实例源码源代码
- oracle adpatch 回退,Oracle EBS使用adpatch工具打patch过程【Z】 - huak
- Excel “不能在隐藏工作簿中编辑宏,请选定“取消窗口隐藏”命令以显示工作簿”
- 如何防止失眠——学习笔记
- c语言程序判断一个字符串是否是回文数,详解判断回文字符串和回文数算法的C语言代码!...
- IntelliJ IDEA之配置JDK的4种方式