關於資料庫中使用聯合索引問題

2021-10-01 02:08:01 字數 978 閱讀 6458

假設某錶t建立聯合索引union_abc,該聯合索引中包含表t中的字段a、b、c,並且聯合索引列的順序也是a、b、c。注意索引列的順序,因為在聯合索引中資料庫執行器在執行前會根據你所建立的聯合索引的列的順序進行優化,如果查詢條件中不是按照聯合索引中列的順序寫的,那麼資料庫執行器在執行前也會強制轉換成聯合索引的列的順序在執行。

因此,建議:

1、在設定聯合索引的時候按照最左匹配原則、使用頻次多的、離散程度高的、占用空間小的放到第一位,其它位依次類推,合理規劃聯合是索引的位次。

2、在寫sql查詢語句的時候嚴格按照聯合索引的位次進行書寫,這樣就省掉了讓資料庫執行器執行前優化索引列位次的操作,一定意義上加快了查詢效率。

如:小明寫的sql語句: select a ,b,c from t where b=2 and c =3 and a =1

優化後的sql語句: select a ,b,c from t where  a =1 and  b=2 and c =3 

在資料庫中如果使用聯合索引,那麼什麼情況下是不走索引的哪,從而導致查詢效率慢?

回答:1、在使用聯合索引的時候,當聯合索引的第乙個列不在where條件語句中,並且所查詢的列其中有的是沒有建立索引的列,那麼這個聯合索引就是無效的!

如:select a ,b,c,d from t where b=1 

2、在使用聯合索引的時候,當聯合索引的第乙個列不在where條件語句中,並且所查詢的條件中有的是沒有建立索引的列,那麼這個聯合索引就是無效的!

如:select a ,b,c from t where b=1 and d = 2

3、第乙個列既不在where條件語句中,所查詢的列其中又有的是沒有建立索引的列,所查詢的條件中還有的是沒有建立索引的列,那麼這個聯合索引就是無效的!

如:select a ,b,c,d from t where b=1  and d = 2 

在資料庫中如果使用聯合索引,那麼什麼情況是走索引哪?

回答:不是上面3種情況的均可以走聯合是索引!

關於MySQL資料庫中使用like對索引的影響

之前只知道在資料庫中like對索引的影響是 的位置不同,在配置值的後面才能執行索引,今天有時間就單獨寫個表看看到底什麼區別 建立表 設定主鍵自增 create table test id int 11 not null auto increment,name varchar 255 primary ...

資料庫 索引 主鍵 聯合索引

參考自 索引 通過key或index定義 可以極大地提高資料查詢速度,但是會降低插入刪除更新表的速度,因為在執行這些操作是,還要操作索引檔案用來維護,所以說索引不是建的越多越好而是要建在合理的字段,比如使用者表,可以建在手機號,郵箱號上。同時,索引可以覆蓋多個列,也就成了聯合索引。主鍵,在一張表中只...

資料庫之聯合索引

索引型別 b tree索引 hash索引 兩種索引對比 1.hash函式計算後的結果不是連續的,因此可以認為是隨機儲存在磁碟上。2.無法進行範圍查詢優化,也無法利用字首優化,排序優化。3.必須回行,通過索引拿到資料的位置,回到表裡去資料。b tree索引 原理 b 樹是一種平衡樹,建樹時安從這至右的...