成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

一個不留神,索引就創(chuàng)建重復了

數(shù)據(jù)庫 MySQL
我們?nèi)粘T谑褂?MySQL 的過程中,基本上都是使用 InnoDB 引擎,所以接下來的討論主要是基于 InnoDB 引擎的 B+Tree 索引來討論,其他的哈希索引全文索引等不在討論范圍種。

相信沒有人會故意創(chuàng)建重復的冗余的索引,很多重復和冗余的索引都是在不經(jīng)意間創(chuàng)建的,今天松哥來和大家捋一捋這個問題。

因為我們?nèi)粘T谑褂?MySQL 的過程中,基本上都是使用 InnoDB 引擎,所以接下來的討論主要是基于 InnoDB 引擎的 B+Tree 索引來討論,其他的哈希索引全文索引等不在討論范圍種。

1. 與聯(lián)合索引重復

在前面的文章中,松哥通過好幾篇文章和大家分享了聯(lián)合索引,包括它涉及到的覆蓋索引、前綴匹配等等,聯(lián)合索引好用,但是對聯(lián)合索引理解不到位的話,可能會創(chuàng)建出如下的重復索引:

CREATE TABLE `user2` (
`id` int(11) unsigned NOT NULL AUTO_INCREMENT,
`username` varchar(32) COLLATE utf8mb4_unicode_ci DEFAULT NULL,
`address` varchar(32) COLLATE utf8mb4_unicode_ci DEFAULT NULL,
`password` varchar(32) COLLATE utf8mb4_unicode_ci DEFAULT NULL,
`email` varchar(16) COLLATE utf8mb4_unicode_ci DEFAULT NULL,
PRIMARY KEY (`id`),
KEY `user_index1` (`username`,`address`),
KEY `user_index2` (`username`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

可以看到,這里創(chuàng)建了兩個索引:

  • user_index1:這個索引包含兩個字段,username 在前 address 在后。
  • user_index2:這個索引包含一個字段 username。

(username,address) 索引既可以當成聯(lián)合索引來用,也可以通過最左匹配原則當成單獨的 (username) 索引來用。

所以,如果再為 username 字段單獨創(chuàng)建一個索引就沒有必要了,這反而會導致增刪改的時候速度變慢。

不過怎么說呢,上面這個結(jié)論適用于 99% 的場景,可能會有一些特殊情況,例如想把 (username) 和某一個特別長的字段建立一個聯(lián)合索引,此時如果單獨使用 username 字段進行搜索的話,效率可能降低,此時視搜索的重要程度,看是否需要創(chuàng)建一個重復的索引。

2. 主鍵加入聯(lián)合索引中

來看看下面這個索引:

CREATE TABLE `user2` (
`id` int(11) unsigned NOT NULL AUTO_INCREMENT,
`username` varchar(32) COLLATE utf8mb4_unicode_ci DEFAULT NULL,
`address` varchar(32) COLLATE utf8mb4_unicode_ci DEFAULT NULL,
`password` varchar(32) COLLATE utf8mb4_unicode_ci DEFAULT NULL,
`email` varchar(16) COLLATE utf8mb4_unicode_ci DEFAULT NULL,
PRIMARY KEY (`id`),
KEY `user_index` (`username`,`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

一個名為 user_index 的索引中包含了兩個字段 username 和 id,其中 id 是主鍵。

在??什么是 MySQL 的“回表”???一文中,松哥和大家聊了,索引按照物理存儲方式可以分為聚簇索引和非聚簇索引。

我們?nèi)粘Kf的主鍵索引,其實就是聚簇索引(Clustered Index);主鍵索引之外,其他的都稱之為非主鍵索引,非主鍵索引也被稱為二級索引(Secondary Index),或者叫作輔助索引。

對于主鍵索引和非主鍵索引,使用的數(shù)據(jù)結(jié)構(gòu)都是 B+Tree,唯一的區(qū)別在于葉子結(jié)點中存儲的內(nèi)容不同:

  • 主鍵索引的葉子結(jié)點存儲的是一行完整的數(shù)據(jù)。
  • 非主鍵索引的葉子結(jié)點存儲的則是主鍵值以及索引列的值。

這是兩者最大的區(qū)別。

既然主鍵已經(jīng)存在于葉子結(jié)點中,那當然沒有在聯(lián)合索引中加入主鍵了。

好啦,幾個小小的注意點,希望能給小伙伴們啟發(fā)。

參考資料:

《高性能 MySQL》

責任編輯:武曉燕 來源: 江南一點雨
相關推薦

2018-04-04 15:50:23

攢機主機配置

2015-10-20 19:38:49

2019-07-15 11:04:37

Spring BootTomcat開發(fā)

2021-07-14 15:06:50

SDK版本 jar

2023-07-18 07:07:47

2023-07-07 06:45:56

LinuxAMDGPU

2019-10-08 15:08:23

互聯(lián)網(wǎng)數(shù)據(jù)技術

2023-05-22 17:19:53

數(shù)字電路

2016-03-08 09:52:22

xcode插件開發(fā)

2014-03-17 15:01:54

2024-05-21 12:51:06

Python對象PyObject

2016-10-27 11:11:12

頭條

2020-12-31 09:20:51

Redis搜索引擎

2021-01-25 13:45:14

模型人工智能深度學習

2021-04-28 14:31:35

Dubbo接口日志

2009-08-19 14:15:42

C# 復合控件

2011-05-11 10:58:39

iOS

2023-05-10 08:05:41

GoWeb應用

2009-08-19 04:14:00

線性鏈表
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 蜜桃黄网| 一区二区在线免费观看视频 | 爱草在线 | 国产你懂的在线观看 | 一区二区免费视频 | 精品欧美一区二区中文字幕视频 | 久久青草av| 激情 婷婷 | 免费一级欧美在线观看视频 | 久久婷婷香蕉热狠狠综合 | 国产高清视频在线 | 91原创视频在线观看 | 久久精品 | 区一区二在线观看 | 欧美日韩精品久久久免费观看 | 国产一级一级 | 欧美黄色大片在线观看 | www.国产精 | 国产一级毛片精品完整视频版 | 亚洲成人在线视频播放 | 麻豆av免费观看 | 亚洲精品三级 | 亚洲经典一区 | 黄色在线免费观看视频网站 | 欧美日韩国产高清视频 | 亚洲精品一区二区三区蜜桃久 | 真人毛片 | 亚洲性爰 | 欧洲高清转码区一二区 | 国产1区2区3区 | 久久久中文 | gogo肉体亚洲高清在线视 | 日韩精品一区二区三区在线观看 | 四虎影院免费在线播放 | 国产高清在线 | 国产精品一区二区三区四区五区 | 国产精品久久久久久久7电影 | 亚洲一区二区久久久 | 亚洲精品久久区二区三区蜜桃臀 | 波多野结衣一二三区 | 欧美电影一区 |