当前位置:网站首页>复合索引使用
复合索引使用
2022-08-08 20:59:00 【わたしわ】
MySQL复合索引使用
一个a,b,c三个字段的索引怎么使用?
一张A表以a(是varchar类型),b,c三个字段建立索引,怎么去使用(先看下面几种使用方式):
1.select * from A where a = ? and b = ? and c = ?
2.select * from A where a = ? and c = ?
3.select * from A where b = ? and c = ?
4.select * from A where c = ? and b = ? and a = ?
5.select * from A where a = ? and b > ? and c = ?
6.select * from A where a like ‘%?%’
7.select * from A where a like ‘?%’
8.select * from A where a = 张三
9.select a,b,c from A
说明:所有?均表示对应类型的数据
以上1,4,7,9可以用到该复合索引,2对于a字段可以用到索引,c字段无法使用
分析:对于符合索引而言我们知道在索引B+树中同一层从左到右是该索引字段的值依次变大,对于符合索引而言a从左到右依次变大,在a相同时b依次变大,b相同时c依次变大,所以1依次将索引字段作为条件可以使用到索引,4按照正常来说是不会使用到索引,但是MySQL在执行之前会经历查询优化器进行优化SQL那么会优化成和1一样的顺序所以也可以使用到,3直接没有a字段那么在B+树中就无法确定走哪一条支线(直接判断b字段在没有a相同的条件下b是一个无序的无法使用索引),5a字段也能使用到但是b和c不能使用到,因为b进行了范围查询,6因为左边有%号,那么对于a字段来说就不能确定走哪一条索引分支,7%号在右边那么可以确定一开始的分支,8因为a字段是varcahr需要带上’‘没有’'会进行隐式的类型转换不能使用到索引,9因为查询的a,b,c都能通过索引树直接获取到值,会使用到覆盖索引那么通过explain查看时在Extra中会有useing index。
总结:对于索引因为是排好序的数据结构,需要落盘所以表中的索引不是越多越好,一般不超过五个,尽量建立复合索引性价比更高(一个复合索引可以有几个单值索引的功能),对于复合索引使用时开头的第一个字段必须要有,如果中间的某些字段没有那么后面的字段是使用不到索引的,范围查找也不行,隐式类型转换或者函数,计算等也会让索引失效。
边栏推荐
- 关于Mac终端自定义命令和Mysql命令问题
- ssh 登录connectction reset by peer
- IO in Kotlin flow
- Kotlin - learn the fifth day of the Handler
- Gradle is as simple as using kotlin to write common commands
- Kotlin study notes
- 去噪论文 Attention-Guided CNN for Image Denoising
- 随手记:laravel、updateOrCreate 和 updateOrInsert 的区别
- Kotlin解析String路径小知识
- 【梦想的声音】
猜你喜欢
编译原理——LL1分析程序实验(C#)
使用LBP特征进行图像分类
去噪论文 Beyond a Gaussian Denoiser: Residual Learning of Deep CNN for Image Denoising
GeoServer入门学习:06-发布多层级TIF地图大图数据
推荐7款好用的Visual Studio扩展
【highcharts应用-双饼图】
目标检测论文 Precise detection of Chinese characters in historical documents with DRL
SQL注入之搭建dnslog
单片机——DHT11 温湿度传感器
安装sentry
随机推荐
ssh 登录connectction reset by peer
Kotlin - learn the fifth day of the Handler
单片机--IIC总线篇
Use fontforge to modify font, keep only numbers
Educational Codeforces Round 112 D. Say No to Palindromes
【读代码重构有感】
目标检测论文 Bridng the Gap Between Anchor-based and Anchor-free Detection via ATSS
Flask 教程 第十章:邮件支持
文档图像二值化DIB_paper_1
go实现快速排序
amd和Intel的CPU到底哪个好?
The new library online | CnOpenDataA shares of the listed company basic information data
Simple Swing interface notes
C#版网络对战五子棋以及Socket通信
【项目经验】--环保项目
Kotlin反射
Kotlin study notes
Gradle简单到使用kotlin编写到常用命令
rancher -部署
Redis布隆过滤器