日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > 数据库 >内容正文

数据库

《MySQL——索引笔记》

發布時間:2023/12/1 数据库 25 豆豆
生活随笔 收集整理的這篇文章主要介紹了 《MySQL——索引笔记》 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

目錄

    • 回表
    • 覆蓋索引
    • 最左前綴原則
    • 聯合索引的時候,如何安排索引內的字段順序?
    • 索引下推
    • 重建索引問題
    • 聯合主鍵索引和 InnoDB 索引組織表問題
    • in與between的區別

回表

回到主鍵索引樹搜索的過程,我們稱為回表。

覆蓋索引

覆蓋索引就是在這次的查詢中,所要的數據已經在這棵索引樹的葉子結點上了。

select ID from T where k between 3 and 5


ID 的值已經在 k 索引樹上了,因此可以直接提供查詢結果,不需要回表.
由于覆蓋索引可以減少樹的搜索次數,顯著提升查詢性能,所以使用覆蓋索引是一個常用的性能優化手段。

覆蓋索引的第二個使用:在聯合索引上使用,也可以避免回表。
如果現在有一個高頻請求,要根據市民的身份證號查詢他的姓名。我們可以建立一個(身份證號、姓名)的聯合索引。它可以在這個高頻請求上用到覆蓋索引,不再需要回表查整行記錄,減少語句的執行時間。

最左前綴原則

聯合索引先根據第一個字段排序,如果第一個字段有相同的,就按照第二個字段排序。

只要滿足最左前綴,就可以利用索引來加速檢索。這個最左前綴可以是聯合索引的最左 N 個字段,也可以是字符串索引的最左 M 個字符。

聯合索引的時候,如何安排索引內的字段順序?

第一原則:
如果通過調整順序,可以少維護一個索引,那么這個順序往往就是需要優先考慮采用的。
如果我們有個頻繁的要求:根據姓名找到該人身份證,那么應該建立聯合索引:(name,ID)
反之,如果我們有個頻繁的要求:根據該人身份證找到該人姓名,那么應該建立聯合索引:(ID,name)

索引下推

索引覆蓋是你要查的信息在二級索引中已經有了,就不需要回表。索引下推是你的過濾條件有一部分符合了最左前綴,那么會用上索引,如果此時不符合最左前綴的部分剛好有聯合索引中的字段,那么在利用最左前綴進行索引查詢的同時,會根據這些字段多做一步過濾,減少索引查詢出來的條數,這樣就減少了回表次數。
如:

mysql> select * from tuser where name like '張%' and age=10 and ismale=1;
1 每次都需要回表2 下推,先濾除不符合的,再回表

重建索引問題

假設,我們有一個主鍵列為 ID 的表,表中有字段 k,并且在 k 上有索引。

mysql> create table T( id int primary key, k int not null, name varchar(16), index (k))engine=InnoDB;

如果你要重建索引 k:

alter table T drop index k; alter table T add index(k);

如果你要重建主鍵索引:

alter table T drop primary key; alter table T add primary key(id);

上面這兩個重建索引的作法對此有什么理解?
為什么要重建索引?
索引可能因為刪除,或者頁分裂等原因,導致數據頁有空洞,重建索引的過程會創建一個新的索引,把數據按順序插入,這樣頁面的利用率最高,也就是索引更緊湊、更省空間。
理解
不論是刪除主鍵還是創建主鍵,都會將整個表重建。所以連著執行這兩個語句的話,第一個語句就白做了。
推薦使用:

alter table T engine=InnoDB

聯合主鍵索引和 InnoDB 索引組織表問題

有這么一個表:

CREATE TABLE `geek` (`a` int(11) NOT NULL,`b` int(11) NOT NULL,`c` int(11) NOT NULL,`d` int(11) NOT NULL,PRIMARY KEY (`a`,`b`),KEY `c` (`c`),KEY `ca` (`c`,`a`),KEY `cb` (`c`,`b`) ) ENGINE=InnoDB;

既然主鍵包含了 a、b 這兩個字段,那意味著單獨在字段 c 上創建一個索引,就已經包含了三個字段了呀,為什么要創建“ca”“cb”這兩個索引?同事告訴他,是因為他們的業務里面有這樣的兩種語句:

select * from geek where c=N order by a limit 1; select * from geek where c=N order by b limit 1;

為了這兩個查詢模式,這兩個索引是否都是必須的?為什么呢?
表記錄:
主鍵 a,b 的聚簇索引組織順序相當于 order by a,b ,也就是先按 a 排序,再按 b 排序,c 無序。

abcd
123d
132d
143d
213d
222d
234d

索引 ca 的組織是先按 c 排序,再按 a 排序,同時記錄主鍵:
這個跟索引 c 的數據是一模一樣的。

cab
213
222
312
314
321
423

索引 cb 的組織是先按 c 排序,再按 b 排序,同時記錄主鍵:

cba
222
231
312
321
341
432

所以,結論是 ca 可以去掉,cb 需要保留。

in與between的區別

--1. select * from T where k in(1,2,3,4,5) --2. select * from T where k between 1 and 5

1.in 內部的數字是未知的,不知道是否有序,是否連續等,所以你只能一個一個去看。
2.一個已知的升序、范圍查詢,只需定位第一個值,后面遍歷就行了。

總結

以上是生活随笔為你收集整理的《MySQL——索引笔记》的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 激情黄色小说视频 | 天堂视频一区二区 | 久久久久久久久久久久久久久 | a毛片网站 | 国产福利91精品一区二区三区 | 人人涩| 亚洲午夜一区二区三区 | 精品亚洲aⅴ无码一区二区三区 | 久久久久国色av免费观看性色 | 日韩欧美卡一卡二 | 97自拍视频在线 | 在线免费观看日韩 | 亚洲va久久久噜噜噜久久天堂 | 干一夜综合 | 手机在线小视频 | 免费国产羞羞网站视频 | av55 | 免费高清av在线看 | 动漫羞羞 | 亚洲免费高清视频 | 男女瑟瑟网站 | 天天影视插插插 | 男生坤坤放进女生坤坤里 | 黄色资源在线 | 国产黄色片免费观看 | 在线观看网站污 | 亚洲天堂不卡 | 亚洲网站色 | 久久网址 | 久久免费看片 | 男人天堂视频网 | 国产一区日本 | 天堂岛av| 欧美亚洲激情视频 | 国产aⅴ无码片毛片一级一区2 | 57pao国产精品一区 | 少妇综合 | 特a级黄色片 | 精品一区不卡 | 一级空姐毛片 | 国产精品sm调教免费专区 | 久久久久国产综合av天堂 | 国产最新自拍视频 | 黄色大片a级| 天天做天天爱 | 国产成人精品一区二区三区福利 | 亚洲精品综合 | 亚洲天堂网在线观看视频 | av资源一区 | 男人用嘴添女人下身免费视频 | 涩涩视频在线观看 | 二区中文字幕 | 欧美三级韩国三级日本三斤 | 日本欧美中文字幕 | 日韩综合在线观看 | 91国产丝袜在线播放 | 国产精品久久色 | av黄色片| 色人阁视频 | 成人网站免费观看 | 爱情岛论坛永久入口 | 51免费看成人啪啪片 | 性高潮久久久久久久久久 | 美女扒开粉嫩尿口 | 国产精品久久久久久久专区 | 国产一区精品在线 | 日韩操| 天天操中文字幕 | 久久久久亚洲av无码专区体验 | 人成网站在线观看 | 午夜免费福利网站 | 亚洲精品成a人 | 奇米网狠狠干 | 亚洲综合色av | 少妇高潮av| 男受被做哭激烈娇喘gv视频 | www夜插内射视频网站 | 激情www | 三级在线观看网站 | 五月的婷婷 | 日韩一区二区a片免费观看 伊人网综合在线 | 日韩精品一区二区三区在线播放 | 国产一区二区三区视频在线播放 | 伊人国产一区 | 人人爽爽爽 | 国产一二三区精品 | 91av免费在线观看 | 久久特级毛片 | 一级中国毛片 | 亚洲精品久久久久国产 | 国产一区二区三区免费 | 色男人的天堂 | 亚洲女优视频 | 色一情一交一乱一区二区三区 | 丰满少妇久久久久久久 | 哺乳期给上司喂奶hd | 色综合五月 | 牛牛精品一区二区 | 亚洲在线 | 激情男女视频 |