MySQL日記——索引的介紹和使用

MySQL性能調(diào)優(yōu)不僅是開發(fā)過程中的一個不可或缺的環(huán)節(jié),也是面試官很愛問的一個部分。
索引是MySQL里一個很重要的部分。

索引是什么

索引可以簡單地理解為“排好序的快速查找數(shù)據(jù)結(jié)構(gòu)”
一般來說索引本身業(yè)很大,不可能全部存儲在內(nèi)存中,因此索引往往以索引文件的形式存儲在磁盤上
我們平時所說的索引,沒有特別指明,都是B樹(多路搜索樹)結(jié)構(gòu)組織的索引。其中聚集索引,次要索引,復(fù)合索引,前綴索引,唯一索引默認(rèn)都是使用B+樹索引,統(tǒng)稱索引。當(dāng)然,除了B+樹這種類型的索引之外,還有哈希索引等

索引的優(yōu)勢

  1. 類似大學(xué)圖書館數(shù)目索引,提高數(shù)據(jù)檢索的效率,降低數(shù)據(jù)庫的IO成本
  2. 通過索引對數(shù)據(jù)進行排序,降低數(shù)據(jù)排序的成本,降低了CPU的消耗

索引的劣勢

  1. 實際上索引也是一張表,該表保存了主鍵與索引字段,并指向?qū)嶓w表的記錄,索引索引列也是要占空間的
  2. 雖然buoying大大提高了初旬速度,同時卻會降低更新表的速度(INSERT,UPDATE,DELETE)
  3. 索引只是提高效率的一個因素,如果你的MYSQL有大數(shù)據(jù)的表,就需要話時間研究簡歷最優(yōu)秀的索引,或優(yōu)化查詢

索引的分類

  1. 單值索引
    即一個索引只包含單個列,一個表可以有多個單列索引,最多不要超過五個
  2. 唯一索引
    索引列的值必須唯一,但允許有空值
  3. 復(fù)合索引
    即一個索引包多個列

基本語法

  1. 創(chuàng)建
    CREATE [UNIQUE] INDEX idnex_name ON tbl_name(column_name(length));
    ALTER tbl_name ADD [UNIQUE] INDEX[index_name] ON (column_name(length));
  2. 刪除
    DROP INDEX [indexName] ON tbl_name;
  3. 查看
    SHOW INDEX FROM tbl_name;
  4. 使用ALTER命令
    4.1 ALTER TABLE tbl_name ADD PRIMARY KEY(columu_name);該語句添加愛一個主鍵,這意味著索引值必須是唯一的,且不能為NULL。
    4.2 ALTER TABLE tbl_name ADD UNIQUE index_name(olumu_name);這條語句創(chuàng)建的索引的值必須是唯一的(除了NULL外,NULL可能會出現(xiàn)多次)。
    4.3 ALTER TABLE tbl_name ADD INDEX index_name(olumu_name);添加普通索引,索引值可出現(xiàn)多次。
    4.4 ALTER TABLE tbl_name ADD FULLTEXT index_name(olumu_name);該語句指定了索引為FULLTEXT,用于全文索引。

哪些情況需要創(chuàng)建索引

  1. 主鍵自動建立唯一索引
  2. 品份作為查詢條件的字段應(yīng)該創(chuàng)建索引
  3. 查詢中與其他表關(guān)聯(lián)的字段,外鍵關(guān)系建立索引
  4. 頻繁更新的字段不適合創(chuàng)建索引
  5. Where條件里不用不到的字段不創(chuàng)建索引
  6. 單鍵/組合索引的選擇問題(在高并發(fā)下傾向創(chuàng)建組合索引)
  7. 查詢中排序的字段,排序字段若通過索引去訪問將大大提高排序速度
  8. 查詢中統(tǒng)計或者分組字段

哪些情況不需要創(chuàng)建索引

  1. 表的記錄太少
  2. 經(jīng)常增刪改的表
  3. 數(shù)據(jù)重復(fù)且分布平均的,某個數(shù)據(jù)列包含許多重復(fù)內(nèi)容的,建立索引就沒有太大的實際效果
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 什么是數(shù)據(jù)庫? 數(shù)據(jù)庫是存儲數(shù)據(jù)的集合的單獨的應(yīng)用程序。每個數(shù)據(jù)庫具有一個或多個不同的API,用于創(chuàng)建,訪問,管理...
    chen_000閱讀 4,131評論 0 19
  • 1、概述 ??索引是一種特殊的文件(InnoDB數(shù)據(jù)表上的索引是表空間的一個組成部分),它們包含著對數(shù)據(jù)表里所有記...
    黒貓閱讀 408評論 0 3
  • 之前的文章一直在規(guī)避索引的建立去優(yōu)化數(shù)據(jù)庫,不是不想講,而是這個太重要,必須抽出來講。今天我們就來研究下數(shù)據(jù)庫索引...
    JackFrost_fuzhu閱讀 4,823評論 0 70
  • 1、MySQL啟動和關(guān)閉(安裝及配置請參照百度經(jīng)驗,這里不再記錄。MySQL默認(rèn)端口號:3306;默認(rèn)數(shù)據(jù)類型格式...
    強壯de西蘭花閱讀 758評論 0 1
  • 1.索引作用 在索引列上,除了上面提到的有序查找之外,數(shù)據(jù)庫利用各種各樣的快速定位技術(shù),能夠大大提高查詢效率。特別...
    kang_KK閱讀 22,109評論 1 51

友情鏈接更多精彩內(nèi)容