1. 程式人生 > 實用技巧 >sql索引

sql索引

1 什麼是索引

什麼是索引(Index)。資料庫中的索引,就好⽐⼀本書的目錄,它可以幫我們快速進行特定 值的定位與查詢,從而加快資料查詢的效率。

2 索引的型別

  • 主鍵索引
  • 非空索引
  • 唯一索引
  • 全文索引
  • 普通索引

唯一索引:在建立唯一索引時要不能給具有相同的索引值。在⼀張資料表⾥可以有多個唯⼀索引。
主鍵索引:在我們給一個欄位設定主鍵的時候,它就會自動建立主鍵索引,用來確保每一個值都是唯一的。⼀張表⾥最多隻有⼀個主鍵索引。
聚集索引:我們在表中新增資料的順序,與我們建立的索引鍵值相同,而且一個表中只能有一個聚集索引。
普通索引:它的結構主要以B+樹和雜湊索引為主,主要是對資料表中的資料進行精確查詢。
全文索引

:它的作用是搜尋資料表中的欄位是不是包含我們搜尋的關鍵字,就像搜尋引擎中的模糊查詢。

3 索引的好處

提高資料的搜尋速度
加快表與表之間的連線速度
在資訊檢索過程中,若使用分組及排序子句進行時,通過建立索引能有效的減少檢索過程中所需的分組及排序時間,提高檢索效率。

4 索引的壞處

在我們建立資料庫的時候,需要花費的時間去建立和維護索引,而且隨著資料量的增加,需要維護它的時間也會增加。
在建立索引的時候會佔用儲存空間。
在我們需要修改表中的資料時,索引還需要進行動態的維護,所以對資料庫的維護帶來了一定的麻煩。

5 什麼時候需要索引?什麼時候又不需要索引?

5-1 需要索引

1.主鍵自動建立唯一索引
2.頻繁作為查詢條件的欄位應該建立索引
3.查詢中排序的欄位建立索引將大大提高排序的速度(索引就是排序加快速查詢
4.查詢中統計或者分組的欄位;
5.一般來說,在WHERE和JOIN中出現的列需要建立索引,但也不完全如此,因為MySQL只對<,<=,=,>,>=,BETWEEN,IN,以及某些時候的LIKE才會使用索引。剛才提到只有某些時候的LIKE才需建立索引。因為在以萬用字元%和_開頭作查詢時,MySQL不會使用索引。

5-2 什麼時候不需要?

  1. 頻繁更新的欄位不適合建立索引,因為每次更新不單單是更新記錄,還會更新索引,儲存索引檔案
  2. where條件裡用不到的欄位,不建立索引;
  3. 表記錄太少,不需要建立索引;
  4. 經常增刪改的表;
    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)- 連表時注意條件型別需一致- 索引雜湊值(重複多)不適合建索