最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Mysql索引創(chuàng)建刪除及使用代價(jià)

 更新時(shí)間:2022年05月31日 09:46:24   作者:把蘋果咬哭的測(cè)試筆記  
這篇文章主要為大家介紹了Mysql索引創(chuàng)建刪除及使用代價(jià)詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪

一、Mysql 中索引的創(chuàng)建刪除

innodb 和 myisam 引擎會(huì)自動(dòng)為主鍵或者帶有 UNIQUE 屬性的列建立索引。

如果要為其他列建立索引,就需要顯示的指明。

1. 創(chuàng)建表的時(shí)候創(chuàng)建索引

CREATE TABLE 表名 (
    各個(gè)列的信息...,
    (KEY/INDEX) 索引名 (需要被索引的單個(gè)列或多個(gè)列)
)

注意,KEY 和 INDEX 任用其一即可,是同義詞。

比如在創(chuàng)建 index_demo 表時(shí)為c2 和 c3 列添加一個(gè)聯(lián)合索引:

CREATE TABLE index_demo(
    c1 INT,
    c2 INT,
    c3 CHAR(1),
    PRIMARY KEY(c1),
    INDEX idx_c2_c3 (c2, c3)
);

這里創(chuàng)建的索引的名稱是idx_c2_c3,雖然索引名字可以任意起,但是建議以idx_為前綴,后面跟著要簡歷的索引的列名,多個(gè)列用下劃線隔開。

2. 修改表結(jié)構(gòu)時(shí)候添加索引

ALTER TABLE 表名 ADD (KEY/INDEX) 索引名 (需要被索引的單個(gè)列或多個(gè)列);

3. 修改表結(jié)構(gòu)時(shí)候刪除索引

ALTER TABLE 表名 DROP (KEY/INDEX) 索引名;

現(xiàn)在刪除掉最開始建的索引idx_c2_c3,可以這樣寫:

ALTER TABLE index_demo DROP INDEX idx_c2_c3;

二、索引的代價(jià)

索引雖然是個(gè)好東西,但是不能肆意創(chuàng)建。

1. 空間上的代價(jià)

這個(gè)是很顯而易見的。

  • 每建立一個(gè)索引,就要為它建立一顆 B+ 樹。
  • 而每一顆 B+ 樹的每一個(gè)節(jié)點(diǎn)都是一個(gè)數(shù)據(jù)頁,默認(rèn)會(huì)占用16kb的存儲(chǔ)空間。
  • 一顆很大的 B+ 樹又是由許多數(shù)據(jù)頁組成。

所以,這會(huì)占用很大一片存儲(chǔ)空間。

2. 時(shí)間上的代價(jià)

維護(hù)順序的耗時(shí)

每當(dāng)對(duì)表中的數(shù)據(jù)進(jìn)行增刪改操作時(shí),都需要修改各個(gè) B+樹 索引。

我們知道:

  • B+ 樹中的每層節(jié)點(diǎn)都是按照索引列的值從小到大的順序組成了雙向鏈表。
  • 無論是葉子節(jié)點(diǎn)還是內(nèi)節(jié)點(diǎn),內(nèi)部中的記錄都是按照索引列的值的大小順序,形成了一個(gè)單鏈表。

所以,當(dāng)進(jìn)行增刪改操作時(shí),可能會(huì)對(duì)節(jié)點(diǎn)和記錄的排序造成破壞,那么存儲(chǔ)引擎就需要額外的時(shí)間進(jìn)行頁面分裂、回收等操作,以維護(hù)節(jié)點(diǎn)和記錄的排序。

如果建立了很多索引,可想而知每個(gè)索引對(duì)應(yīng)的B+ 樹都要進(jìn)行相關(guān)的維護(hù)操作,這要帶來多大的消耗。

執(zhí)行計(jì)劃分析的耗時(shí)

在執(zhí)行查詢語句之前,首先會(huì)生成一個(gè)執(zhí)行計(jì)劃。

一般來說,一條查詢語句在執(zhí)行的過程中最多使用一個(gè)二級(jí)索引,在生成執(zhí)行計(jì)劃時(shí)需要計(jì)算使用不同索引執(zhí)行查詢時(shí)所需的成本,最后選擇最低的那個(gè)索引進(jìn)行查詢。

如果建立了太多的索引,可能導(dǎo)致在進(jìn)行成本分析的時(shí)候就耗時(shí)太多,從而影響查詢語句的執(zhí)行性能。

小結(jié)

綜上所述,在一個(gè)表中建立的索引越多,占用的存儲(chǔ)空間就越多,在增刪改記錄或者生成執(zhí)行計(jì)劃時(shí)性能也就越差。

所以,該怎樣建立又好又少的索引?

本文參考書籍:《mysql是怎樣運(yùn)行的》

更多關(guān)于Mysql索引創(chuàng)建刪除的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • MySql nion與Limit查詢介紹

    MySql nion與Limit查詢介紹

    這篇文章主要為大家詳細(xì)介紹一下MySQL數(shù)據(jù)庫中union、limit查詢的使用,文中的示例代碼講解詳細(xì),對(duì)我們學(xué)習(xí)MySQL有一定幫助,需要的可以參考一下
    2022-09-09
  • 開啟MySQL遠(yuǎn)程連接的方法

    開啟MySQL遠(yuǎn)程連接的方法

    這篇文章主要介紹了開啟MySQL遠(yuǎn)程連接的方法,幫助大家更好的理解和學(xué)習(xí)MySQL數(shù)據(jù)庫的使用,感興趣的朋友可以了解下
    2020-12-12
  • MySQL的binlog日志使用詳解

    MySQL的binlog日志使用詳解

    這篇文章主要介紹了MySQL的binlog日志使用詳解,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2021-03-03
  • MySQL InnoDB架構(gòu)的相關(guān)總結(jié)

    MySQL InnoDB架構(gòu)的相關(guān)總結(jié)

    InnoDB存儲(chǔ)引擎架構(gòu)作為MySQL最常用的存儲(chǔ)引擎,每個(gè)后端程序員都應(yīng)有所了解,本文將具體講述MySQL InnoDB架構(gòu)的相關(guān)知識(shí),感興趣的朋友可以參考下
    2021-05-05
  • Mysql數(shù)據(jù)庫開啟遠(yuǎn)程連接流程

    Mysql數(shù)據(jù)庫開啟遠(yuǎn)程連接流程

    文章講述了如何在本地MySQL數(shù)據(jù)庫上開啟遠(yuǎn)程訪問,并詳細(xì)步驟包括配置防火墻、設(shè)置MySQL用戶權(quán)限、使用Navicat進(jìn)行遠(yuǎn)程連接等
    2025-02-02
  • 關(guān)于MySQL數(shù)據(jù)遷移--data目錄直接替換注意事項(xiàng)的詳解

    關(guān)于MySQL數(shù)據(jù)遷移--data目錄直接替換注意事項(xiàng)的詳解

    本篇文章是對(duì)關(guān)于MySQL數(shù)據(jù)遷移--data目錄直接替換的注意事項(xiàng)進(jìn)行了詳細(xì)的分析介紹,需要的朋友參考下
    2013-06-06
  • Mysql MVCC多版本并發(fā)控制詳情

    Mysql MVCC多版本并發(fā)控制詳情

    這篇文章主要介紹了Mysql MVCC多版本并發(fā)控制詳情,MVCC是一種并發(fā)控制的方法,一般在數(shù)據(jù)庫管理系統(tǒng)中,實(shí)現(xiàn)對(duì)數(shù)據(jù)庫的并發(fā)訪問,在編程語言中實(shí)現(xiàn)事務(wù)內(nèi)存,下文更多相關(guān)介紹需要的小伙伴可以參考一下
    2022-04-04
  • MySQL實(shí)現(xiàn)用逗號(hào)進(jìn)行拼接、以逗號(hào)進(jìn)行分割

    MySQL實(shí)現(xiàn)用逗號(hào)進(jìn)行拼接、以逗號(hào)進(jìn)行分割

    這篇文章主要介紹了MySQL實(shí)現(xiàn)用逗號(hào)進(jìn)行拼接、以逗號(hào)進(jìn)行分割問題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-12-12
  • Finished with error:Navicat運(yùn)行SQL文件報(bào)錯(cuò)的解決

    Finished with error:Navicat運(yùn)行SQL文件報(bào)錯(cuò)的解決

    這篇文章主要介紹了Finished with error:Navicat運(yùn)行SQL文件報(bào)錯(cuò)的問題及解決方案,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-04-04
  • MySQL如何添加外鍵

    MySQL如何添加外鍵

    MySQL是一種常用的關(guān)系型數(shù)據(jù)庫管理系統(tǒng),它支持外鍵的添加,本文主要介紹了MySQL如何添加外鍵,具有一定的參考價(jià)值,感興趣的可以了解一下
    2023-09-09

最新評(píng)論

象山县| 广饶县| 新营市| 乌审旗| 兴国县| 新竹县| 博白县| 北辰区| 山东| 金秀| 延川县| 锡林郭勒盟| 旬阳县| 内丘县| 商洛市| 股票| 德钦县| 化州市| 衡阳市| 盱眙县| 抚顺市| 平昌县| 濮阳县| 鱼台县| 观塘区| 雷波县| 鸡西市| 孟津县| 平利县| 高清| 邓州市| 隆子县| 广东省| 琼中| 建瓯市| 张家口市| 平陆县| 彭山县| 武川县| 高密市| 龙门县|