1. 程式人生 > 資料庫 >MySQL索引的基本語法

MySQL索引的基本語法

索引是排好序的資料結構!可以用在 where 條件查詢的欄位,和order by 排序的欄位,有了索引,便可以快速地定位資料所在的實體地址並找出來。

索引的分類

1.普通索引(normal):沒有任何約束,主要用於提高查詢效率

2.唯一索引(UNIQUE):在普通索引的基礎上增加了資料唯一性的約束,可以有多個

3.主鍵索引(primary key):主鍵索引在唯一索引的基礎上增加了不為空的約束,也就是 NOT NULL+UNIQUE,只能有一個

4.全文索引(FULLTEXT):MySQL 自帶的全文索引只支援英文。

一般使用專門的全文搜尋引擎,比如 ES(ElasticSearch)

建立索引

#普通索引

ALTER TABLE 表名 ADD INDEX 索引名 (column_list);

#唯一索引

ALTER TABLE 表名 ADD UNIQUE 索引名(column_list);

#主鍵索引

ALTER TABLE 表名 ADD PRIMARY KEY 索引名(column_list);

#全文索引(字串資料型別)

ALTER TABLE 表名 ADD fulltext 索引名(column_list);  

#檢視索引

show index from student \G

這裡用\G 代替分號結束符;可以格式化輸出資料資訊。

#刪除索引

修改表的方式刪除索引

ALTER TABLE 表名 DROP INDEX 索引名;

刪除主鍵索引

ALTER TABLE 表名 DROP PRIMARY KEY;

索引列為一列時為單一索引;
多個列組合在一起建立的索引叫做聯合索引

什麼情況下可以建立索引?

1.欄位的數值有唯一性的限制,比如id

2.頻繁作為 WHERE 查詢條件的欄位,尤其在資料表大的情況下

如果在資料量非常大的情況下,沒有 WHERE 條件過濾是非常可怕的。

3.需要經常 GROUP BY 和 ORDER BY 的列

4.UPDATE、DELETE 的 WHERE 條件列,一般也需要建立索引

原理是因為我們需要先根據 WHERE 條件列檢索出來這條記錄,然後再對它進行更新或刪除,非索引欄位更新資料效果更明顯;

如果索引太多了,在更新資料的時候,如果涉及到索引更新,就會造成負擔。

5.DISTINCT 欄位需要建立索引

6.做多表 JOIN 連線操作時,建立索引需要注意以下的原則

連線表的數量儘量不要超過 3 張,每增加一張表就相當於增加了 一次巢狀的迴圈,數量級增長會非常快 對用於連線的欄位建立索引,並且該欄位在多張表中的型別必須一致。

什麼時候不需要建立索引?

索引的價值是快速定位,如果起不到定位的欄位通常是不需要建立索引的

1.WHERE 條件(包括 GROUP BY、ORDER BY)裡用不到的欄位不需要建立索引;

2.表記錄太少,比如少於 1000 行,那麼是不需要建立索引;

3.欄位中如果有大量重複資料,也不用建立索引,比如性別欄位;

4.頻繁更新的欄位不一定要建立索引。因為更新資料的時候,也需要更新索引,如果索引太多,在更新索引的時候也會造成負擔,從而影響效率;

什麼情況下索引失效?

1.如果索引列進行了表示式計算,使用函式,則會失效

2.在 WHERE 子句中,如果在 OR 前的條件列進行了索引,而在 OR 後的條件列沒有進行索引,那麼索引會失效。

3.當我們使用 LIKE 進行模糊查詢的時候,表示式不能是 % 開始

4.索引列儘量設定為 NOT NULL 約束

判斷索引列是否為 NOT NULL,往往需要走全表掃描,因此我們最好在設計資料表的時候就將欄位設定為 NOT NULL 約束比如你可以將 INT 型別的欄位,預設值設定為 0。將字元型別的預設值設定為空字串 ('')

以上就是MySQL索引的基本語法的詳細內容,更多關於MySQL索引語法的資料請關注我們其它相關文章!