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

一個不留神,索引就創建重復了

數據庫 MySQL
我們日常在使用 MySQL 的過程中,基本上都是使用 InnoDB 引擎,所以接下來的討論主要是基于 InnoDB 引擎的 B+Tree 索引來討論,其他的哈希索引全文索引等不在討論范圍種。

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

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

1. 與聯合索引重復

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

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;

可以看到,這里創建了兩個索引:

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

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

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

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

2. 主鍵加入聯合索引中

來看看下面這個索引:

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 的“回表”???一文中,松哥和大家聊了,索引按照物理存儲方式可以分為聚簇索引和非聚簇索引。

我們日常所說的主鍵索引,其實就是聚簇索引(Clustered Index);主鍵索引之外,其他的都稱之為非主鍵索引,非主鍵索引也被稱為二級索引(Secondary Index),或者叫作輔助索引。

對于主鍵索引和非主鍵索引,使用的數據結構都是 B+Tree,唯一的區別在于葉子結點中存儲的內容不同:

  • 主鍵索引的葉子結點存儲的是一行完整的數據。
  • 非主鍵索引的葉子結點存儲的則是主鍵值以及索引列的值。

這是兩者最大的區別。

既然主鍵已經存在于葉子結點中,那當然沒有在聯合索引中加入主鍵了。

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

參考資料:

《高性能 MySQL》

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

2018-04-04 15:50:23

攢機主機配置

2015-10-20 19:38:49

2019-07-15 11:04:37

Spring BootTomcat開發

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

互聯網數據技術

2023-05-22 17:19:53

數字電路

2016-03-08 09:52:22

xcode插件開發

2014-03-17 15:01:54

2024-05-21 12:51:06

Python對象PyObject

2020-12-31 09:20:51

Redis搜索引擎

2016-10-27 11:11:12

頭條

2021-04-28 14:31:35

Dubbo接口日志

2021-01-25 13:45:14

模型人工智能深度學習

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

線性鏈表

2021-12-30 09:40:33

CentOS家庭實驗室Linux
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 亚洲精品一二三 | 亚洲男人的天堂网站 | 日韩欧美精品在线 | 国产亚洲精品美女久久久久久久久久 | 亚洲精品电影网在线观看 | 麻豆av一区二区三区久久 | 国产精品久久一区 | 国产精品自产拍 | 日韩久久网 | 国产亚洲成av人片在线观看桃 | 国产1区 | 国产乱码精品1区2区3区 | 请别相信他免费喜剧电影在线观看 | 免费永久av | 99一区二区 | 九色.com| 精品久久久久久 | 九九热免费在线观看 | 91看片网址 | 久草青青草 | 成年人在线视频 | 午夜影视 | 精品1区2区| 亚洲精品久久久久久久久久久久久 | 中文字字幕一区二区三区四区五区 | 国产日韩一区二区三区 | 日韩一二区在线观看 | 亚洲成人精品 | 亚洲高清在线播放 | 国产一区久久久 | 亚洲精品一区二三区不卡 | 久久大陆| 久久激情视频 | 黄色激情毛片 | 久久久久亚洲精品 | 欧美精品网站 | 天天插天天狠天天透 | 日韩爱爱网 | 97精品国产| 亚洲国产成人精品女人久久久 | 欧美精品一区二区三区四区 |