Mysql 索引的基礎和類型 創建原則和注意事項

什麼是索引?

索引是數據表中一個或多個列進行排序的數據結構

爲什麼需要索引?  因爲索引能夠大幅提升檢索速度

Mysql 使用的索引結構是B-Tree

 

常見查找結構以及優缺點:

    線性查找:一個個的找;實現簡單;太慢

    二分查找:有序,簡單,要求是有序的,插入特別慢

    HASH:查詢快;佔用空間;不太適合存儲大規模數據

    二叉查找樹:插入和查找快,無法存大規模數據,複雜度退化

    平衡樹(只有兩個節點):解決二叉樹退化的問題,樹是平衡的。節點非常多的適合,樹高會很高。

    多路查找樹:一個父親多個孩子節點(度);節點過多樹高不會特別深

    多路平衡查找樹:B-Tree

索引對性能的影響:

  • 大大減少對服務器需要掃描的數據量
  • 幫助服務器避免排序和臨時表
  • 將隨機IO變成順序IO
  • 大大提高查詢速度,降低寫的速度,佔用磁盤

索引的使用場景:

    對於非常小的表沒有必要建立索引

    中到大型表,索引很有效

    特大型的表,建立和使用索引的代價將隨之增長

 

索引的類型

  • 普通索引
CREATE INDEX indexName ON mytable(username(length));
  • 唯一索引(一個表可以有多個)
CREATE UNIQUE INDEX indexName ON mytable(username(length))
  • 主鍵索引(不可以有空值,一個表只能有一個)
  • 聯合索引(將多個列組合在一起創建索引,可以覆蓋多個列)組合索引就是複合索引
  • 外鍵索引
  • 全文索引 FULLTEXT 

 

索引的創建原則:

    1:最適合索引的列是出現在where子句中的列,或連接子句中的列而不是出現在select關鍵字後的列,經常用作表連接的字段,經常出現在order by、 groupby之後的字段

    2:索引的基數越大,索引的效果越好

    3:對字符串進行索引,應該制定一個前綴長度,可以節省大量的索引空間

    4:根據情況創建符合索引

    5:避免創建過多的索引,索引會額外佔用磁盤空間,降低寫操作效率

    6:主鍵儘可能的選擇較短的數據類型,可以有效減少索引的磁盤佔用提高查詢效率

    7:儘量使用費控字段,mysql很難對空值進行查詢優化

    8:區分度高,離散度大,作爲索引的字段值儘量不要有大量相同值

 

注意:

以下情況索引會失效!!! :簡單講就是 模糊匹配 類型轉換 最左匹配

    1:複合索引遵循前綴原則

    2:like查詢,%不能在前,可以使用全文索引。

    3:column is null 可以使用索引

    4:如果mysql估計使用索引會比全表索引比全表掃描更慢,會放棄使用索引。

    5:如果or 前的條件中的列有索引,後面的沒有,索引都不會被用到

    6:列類型是字符串,查詢時一定要給值加引號,否則索引會失效

 

普通索引是最基本的索引,它沒有任何限制。它有以下幾種創建方式:
(1)直接創建索引

CREATE INDEX index_name ON table(column(length))

(2)修改表結構的方式添加索引

ALTER TABLE table_name ADD INDEX index_name ON (column(length))

(3)創建表的時候同時創建索引

CREATE TABLE `table` (
    `id` int(11) NOT NULL AUTO_INCREMENT ,
    `title` char(255) CHARACTER NOT NULL ,
    `content` text CHARACTER NULL ,
    `time` int(10) NULL DEFAULT NULL ,
    PRIMARY KEY (`id`),
    INDEX index_name (title(length))
)

(4)刪除索引

DROP INDEX index_name ON table

延申:

什麼是聚集索引和非聚集索引?

    聚集還是非聚集指的是B+Tree葉節點存的是指針(數據地址)還是數據記錄, 指針就是聚集索引,數據記錄就是非聚集索引

    MyISAM 索引和數據分離,使用的是非聚集索引

    InnoDB數據文件就是索引文件,主鍵索引就是聚集索引

 

聚集索引可參考這篇文章,講的很棒   https://www.cnblogs.com/s-b-b/p/8334593.html

 

 

 

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章