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

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

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

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

innodb 和 myisam 引擎會自動為主鍵或者帶有 UNIQUE 屬性的列建立索引。

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

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

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

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

比如在創(chuàng)建 index_demo 表時為c2 和 c3 列添加一個聯(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_為前綴,后面跟著要簡歷的索引的列名,多個列用下劃線隔開。

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

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

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

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

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

ALTER TABLE index_demo DROP INDEX idx_c2_c3;

二、索引的代價

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

1. 空間上的代價

這個是很顯而易見的。

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

所以,這會占用很大一片存儲空間。

2. 時間上的代價

維護順序的耗時

每當對表中的數(shù)據(jù)進行增刪改操作時,都需要修改各個 B+樹 索引。

我們知道:

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

所以,當進行增刪改操作時,可能會對節(jié)點和記錄的排序造成破壞,那么存儲引擎就需要額外的時間進行頁面分裂、回收等操作,以維護節(jié)點和記錄的排序。

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

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

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

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

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

小結(jié)

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

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

本文參考書籍:《mysql是怎樣運行的》

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

相關(guān)文章

  • MySql nion與Limit查詢介紹

    MySql nion與Limit查詢介紹

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

    開啟MySQL遠程連接的方法

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

    MySQL的binlog日志使用詳解

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

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

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

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

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

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

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

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

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

    MySQL實現(xiàn)用逗號進行拼接、以逗號進行分割

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

    Finished with error:Navicat運行SQL文件報錯的解決

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

    MySQL如何添加外鍵

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

最新評論

五指山市| 鄯善县| 临武县| 南城县| 保山市| 秦皇岛市| 陆丰市| 堆龙德庆县| 丰台区| 高唐县| 屯门区| 左云县| 类乌齐县| 博客| 鹿泉市| 镶黄旗| 和林格尔县| 恩施市| 宜城市| 金乡县| 永川市| 铜梁县| 克东县| 三明市| 泰兴市| 浙江省| 绥阳县| 万盛区| 栾川县| 丰县| 多伦县| 十堰市| 衢州市| 柏乡县| 会宁县| 赤水市| 邯郸市| 淮北市| 三河市| 射阳县| 福贡县|