深入了解MySQL中的组合索引,看看与单列索引的区别

青灯夜游
Lepaskan: 2021-11-03 19:29:05
ke hadapan
7010 orang telah melayarinya

本篇文章带大家了解一下MySQL中的组合索引,介绍一下创建、删除组合索引的方法,聊聊组合索引陷阱、组合索引与单列索引的区别、组合索引使用场景,希望对大家有所帮助!

深入了解MySQL中的组合索引,看看与单列索引的区别

什么是组合索引

两个或更多个列上的索引被称作联合索引,联合索引又叫组合索引。【相关推荐:mysql视频教程

例如索引是key index (a,b,c)可以支持a | a,b| a,b,c3 种组合进行查找,但不支持b,c进行查找。在使用的时候,a, c组合也可以用,但实际上只用到了a的索引

1.png

创建组合索引

-- 普通的组合索引 create index index_name on table_name (column1, column2, ...) -- 组合要求唯一的索引,相比与上一种,多出了 【unique】关键字 create unique index index_name on table_name (column1, column2, ...)
Salin selepas log masuk

2.png

删除组合索引

-- 用法 1 drop index index_name on talbe_name -- 用法 2 alter table table_name drop index index_name -- 用法 3,对 2 的包装 alter table table_name drop primary key
Salin selepas log masuk

单列索引陷阱

3.png

4.png

如图所示,我们创建了 2 个索引,在 where 中使用and进行查询是,从执行计划里看只使用到了第一个条件上的索引,后续的索引直接被忽略掉

组合索引陷阱

如图,现在建立组合索引 a,b,c

5.png

上图的条件查询为b,a,c,mysql 会自动处理条件顺序变为a,b,c, 再使用定义好的组合索引

6.png

上图的查询条件是b,a,同样的,mysql 调整条件顺序为a,b,再走组合索引

7.png

上图的查询条件是b,c,很明显,由于没有使用a作为条件列,导致 mysql 没有使用组合索引

与单列索引的区别

联合索引中列的顺序非常重要,从左原则。

单个索引就是一个一个起作用,也就是说有三个单个索引,哪个条件查询在前哪个起作用,其他不起作用。

组合索引使用场景

  • where 条件会经常出现的,并且当前表的数量比较大。

  • where 条件中是用and而非or的时候。

  • 联合索引比单个索引更适合,因为索引占用一定磁盘空间,也就说明有一定的开销,如果多个单个索引比较多,那么多资源的浪费也比较多,联合索引相当于对多个列建索引,并且只建一次,and 条件下非常适合。

更多编程相关知识,请访问:编程视频!!

Atas ialah kandungan terperinci 深入了解MySQL中的组合索引,看看与单列索引的区别. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Label berkaitan:
sumber:juejin.cn
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan
Tentang kita Penafian Sitemap
Laman web PHP Cina:Latihan PHP dalam talian kebajikan awam,Bantu pelajar PHP berkembang dengan cepat!