為什麼要有索引?就像為什麼書要有目錄一樣。 索引是什麼東西?和目錄一樣成為書的一部分。 索引是由什麼組成的?原文中具有代表性的一部分。 索引有三種添加方式: 1. 在創建表的時候,直接在列名後面添加 或在後面單獨定義 2. 在表外為其創建 3. 外界進行修改時添加 索引有五種分類: 普通索引, 關鍵 ...
為什麼要有索引?就像為什麼書要有目錄一樣。
索引是什麼東西?和目錄一樣成為書的一部分。
索引是由什麼組成的?原文中具有代表性的一部分。
索引有三種添加方式:
1. 在創建表的時候,直接在列名後面添加 或在後面單獨定義
2. 在表外為其創建
3. 外界進行修改時添加
CREATE TABLE user ( id key, key index_id (id) ); CREATE INDEX index_id ON user(id); ALTER TABLE user ADD INDEX index_id(id);
索引有五種分類:
普通索引,
關鍵詞 Key 、Index
作用:起普通目錄的作用,沒有加上任何限制條件,一個表可以存在多個普通索引
唯一索引,
關鍵詞 Unique Key 、Unique Index
作用:規定定義為唯一索引的列,不允許包含重覆項但允許為NULL
主鍵索引,
關鍵詞 Primary Key 、Primary Index
作用:在唯一索引的基礎上,不允許為NULL
全文索引,
關鍵詞 FullText
作用:專為模糊查詢服務,有一套全新的查詢語法
SELECT * FROM user WHERE MATCH (id ) AGAINST ( ' xxx ');
組合索引,
關鍵詞 Key (列1,列2 ...)
作用:對於多條件查詢會顯著提高速度,但是存儲該索引的代價也很大
局限性:
1. 最左原則。即只要你是從“列1”開始查詢,你的絕大部分查詢(不包含%xx、%xx%)方式都可以使用到該索引,但如果你不包含“列1” 的查詢無法使用該查詢。
2. 舍後原則。即如果你查詢條件中包含 “列1”、“列3”... ,那麼由於你跳過了“列2”則該索引只會使用“列1” 去進行查詢,後面的全部捨棄。同等與,你只寫了 “列1” 之這一個查詢條件
3. 模止原則。即在你的查詢條件中,設置 “列2” 為“xx%” 的模糊查詢,那麼索引會將“列2”之後的所有列捨去。
多說一點:
全文索引和唯一索引的區別:
1. 本質:
全文索引是,一種約束。
唯一索引是,一種索引。
2. 組成:
全文索引包含了不可重覆性,並不允許為NULL。自增長必須依賴全文索引。
唯一索引也有不可重覆性,但允許為NULL。
3.作用:
全文索引可以被其他表引用成外鍵,並且一張表中只有一個全文索引。
唯一索引無法成為外鍵,而且一張表可以有多個唯一索引。
小疑問:
組合索引時,
1.查詢的時候不按照索引的順序查詢,如 WHERE “列2” AND “列1” AND “列3” 是否能用上?
2.查詢超出索引設定的列時,是否還能起作用?
都可以
也許到這裡,你會使用簡單的語法去讓資料庫幫你實現索引。
但是,面對為什麼索引能夠讓查詢變的高效化時,你又會變得束手無策。
我們要知其然,還要知其所以然。