sql索引
阿新 • • 發佈:2020-09-17
1 什麼是索引
什麼是索引(Index)。資料庫中的索引,就好⽐⼀本書的目錄,它可以幫我們快速進行特定 值的定位與查詢,從而加快資料查詢的效率。
2 索引的型別
- 主鍵索引
- 非空索引
- 唯一索引
- 全文索引
- 普通索引
唯一索引
:在建立唯一索引時要不能給具有相同的索引值。在⼀張資料表⾥可以有多個唯⼀索引。
主鍵索引
:在我們給一個欄位設定主鍵的時候,它就會自動建立主鍵索引,用來確保每一個值都是唯一的。⼀張表⾥最多隻有⼀個主鍵索引。
聚集索引
:我們在表中新增資料的順序,與我們建立的索引鍵值相同,而且一個表中只能有一個聚集索引。
普通索引
:它的結構主要以B+樹和雜湊索引為主,主要是對資料表中的資料進行精確查詢。
全文索引
3 索引的好處
提高資料的搜尋速度
加快表與表之間的連線速度
在資訊檢索過程中,若使用分組及排序子句進行時,通過建立索引能有效的減少檢索過程中所需的分組及排序時間,提高檢索效率。
4 索引的壞處
在我們建立資料庫的時候,需要花費的時間去建立和維護索引,而且隨著資料量的增加,需要維護它的時間也會增加。
在建立索引的時候會佔用儲存空間。
在我們需要修改表中的資料時,索引還需要進行動態的維護,所以對資料庫的維護帶來了一定的麻煩。
5 什麼時候需要索引?什麼時候又不需要索引?
5-1 需要索引
1.主鍵自動建立唯一索引
2.頻繁作為查詢條件的欄位應該建立索引
3.查詢中排序的欄位建立索引將大大提高排序的速度(索引就是排序加快速查詢
4.查詢中統計或者分組的欄位;
5.一般來說,在WHERE和JOIN中出現的列需要建立索引,但也不完全如此,因為MySQL只對<,<=,=,>,>=,BETWEEN,IN,以及某些時候的LIKE才會使用索引。剛才提到只有某些時候的LIKE才需建立索引。因為在以萬用字元%和_開頭作查詢時,MySQL不會使用索引。
5-2 什麼時候不需要?
- 頻繁更新的欄位不適合建立索引,因為每次更新不單單是更新記錄,還會更新索引,儲存索引檔案
- where條件裡用不到的欄位,不建立索引;
- 表記錄太少,不需要建立索引;
- 經常增刪改的表;
5.資料重複且分佈平均的欄位;些資料包含大量重複資料,因此他建立索引就沒有太大的效果,例如性別欄位,只有男女,不適合建立索引。
6 索引的操作
6-1 建立
建立普通索引 --CREATE INDEX index_name ON table_name(col_name); --建立唯一索引 CREATE UNIQUE INDEX index_name ON table_name(col_name); --建立普通組合索引 CREATE INDEX index_name ON table_name(col_name_1,col_name_2); --建立唯一組合索引CREATE UNIQUE INDEX index_name ON table_name(col_name_1,col_name_2); 通過修改表結構來建立 ALTER TABLE table_name ADD INDEX index_name(col_name); 建立表時候直接建立 CREATE TABLE table_name ( ID INT NOT NULL,col_name VARCHAR (16) NOT NULL, INDEX index_name (col_name) );
6-2 索引的刪除
--直接刪除索引
DROP INDEX index_name ON table_name;
--修改表結構刪除索引
ALTER TABLE table_name DROP INDEX index_name;
7 相關sql命令
查看錶結構
desc 表名字
查看錶建立的sql
show create table table_name;
檢視索引
show index from table_name;
8 其它注意事項
避免使用select *- count(1)或count(列) 代替 count(*)
- 建立表時儘量時 char 代替 varchar
- 表的欄位順序固定長度的欄位優先
- 組合索引代替多個單列索引(經常使用多個條件查詢時)
- 儘量使用短索引
- 使用連線(JOIN)來代替子查詢(Sub-Queries)- 連表時注意條件型別需一致- 索引雜湊值(重複多)不適合建索