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索引語法的資料請關注好吧啦網其它相關文章!
相關文章:
