mysql高級學習之索引的優劣勢及規則使用

一、索引的優劣勢

優點:可以快速的檢索  、可以加快分組和排序

缺點: 占用儲存空間、降低數據表的修改操作

二、索引的分類

主鍵索引 即主索引,根據主鍵 pk_clolum(length)建立索引,不允許重復,不允許空值
唯一索引 用來建立索引的列的值必須是唯一的,允許空值
普通索引 用表中的普通列構建的索引,沒有任何限制
全文索引 用大文本對象的列構建的索引
全文索引 用大文本對象的列構建的索引;
組合索引 用多個列組合構建的索引,這多個列中的值不允許有空值。

三、使用索引的規則

1、適合建立索引的情況

  • 主鍵自動建立唯一索引;
  • 經常作為查詢條件在 WHERE 或者 ORDER BY 語句中出現的列要建立索引;
  • 作為排序的列要建立索引;
  • 查詢中與其他表關聯的字段,外鍵關系建立索引;
  • 高並發條件下傾向組合索引;
  • 用於聚合函數的列可以建立索引,例如使用瞭 max(column_1)或者count(column_1)時的 column_1 就需要建立索引。

2、不適合建立索引的情況

  • 經常增刪改的列不要建立索引;
  • 有大量重復的列不建立索引;
  • 表記錄太少不要建立索引。

3、索引失靈的情況

  • 在組合索引中不能有列的值為 NULL,如果有,那麼這一列對組合索引就是無效的;
  • LIKE 操作中,’%aaa%’不會使用索引,也就是索引會失效,但是‘aaa%’可以使用索引;
  • 在索引的列上使用表達式或者函數會使索引失效;
  • 在查詢條件中使用不等於,包括<符號、>符號和!=會導致索引失效;
  • 在查詢條件中使用 IS NULL 或者 IS NOT NULL 會導致索引失效;
  • 字符串不加單引號會導致索引失效;
  • 在查詢條件中使用 OR 連接多個條件會導致索引失效,除非 OR 鏈接的每個條件都加上索引;
  • 如果排序的字段使用瞭索引,那麼 select 的字段也要是索引字段,否則索引失效;
  • 盡量不要包括多列排序,如果一定要,最好為這隊列構建組合索引。

四、關於索引的SQL

1、創建表的時候添加索引

-- 創建表的時候添加索引
-- INDEX 關鍵詞
-- myindex 索引的名稱自己起的
-- (username(16))添加到哪一個字段上
CREATE TABLE mytable(
 ID INT NOT NULL,
 username VARCHAR(16) NOT NULL,
 INDEX myindex (username(16))
);

2、創建表過後添加索引

-- 添加索引
-- myindex索引的名字(自己定義)
-- mytable 表的名字
CREATE INDEX myindex ON mytable(username(16));
或者
ALTER TABLE mytable ADD INDEX myindex(username);

3 查看索引

-- mytable 表的名字
 show index FROM mytable;

4、刪除索引

-- myindex索引的名字(自己定義)
-- mytable 表的名字
DROP INDEX myindex ON mytable;
或者
ALTER TABLE mytable DROP INDEX myindex;

總結

到此這篇關於mysql高級學習之索引的優劣勢及規則使用的文章就介紹到這瞭,更多相關mysql高級索引內容請搜索WalkonNet以前的文章或繼續瀏覽下面的相關文章希望大傢以後多多支持WalkonNet!

推薦閱讀: