正確理解Mysql的列索引和多列索引

來源:互聯網
上載者:User

標籤:table   資料庫   能力   效果   int   sha   ble   mysq   種類   

  MySQL資料庫提供兩種類型的索引,如果沒正確設定,索引的利用效率會大打折扣卻完全不知問題出在這。

 

[c-sharp] view plain copy 
  1. CREATE TABLE test (  
  2.     id         INT NOT NULL,  
  3.     last_name  CHAR(30) NOT NULL,  
  4.     first_name CHAR(30) NOT NULL,  
  5.     PRIMARY KEY (id),  
  6.     INDEX name (last_name,first_name)  
  7. );  

 

以上建立的其實是一個多列索引,建立列索引的代碼如下:

 

[c-sharp] view plain copy 
  1. CREATE TABLE test (  
  2.     id         INT NOT NULL,  
  3.     last_name  CHAR(30) NOT NULL,  
  4.     first_name CHAR(30) NOT NULL,  
  5.     PRIMARY KEY (id),  
  6.     INDEX name (last_name),  
  7.      INDEX_2 name (first_name)  
  8. );  

 
一個多列索引可以認為是包含通過合并(concatenate)索引列值建立的值的一個排序數組。 當查詢語句的條件中包含last_name 和 first_name時,例如:

 

 

[c-sharp] view plain copy 
  1. SELECT * FROM test WHERE last_name=‘Kun‘ AND first_name=‘Li‘;  

 

sql會先過濾出last_name合格記錄,在其基礎上在過濾first_name合格記錄。那如果我們分別在last_name和first_name上建立兩個列索引,mysql的處理方式就不一樣了,它會選擇一個最嚴格的索引來進行檢索,可以理解為檢索能力最強的那個索引來檢索,另外一個利用不上了,這樣效果就不如多列索引了。

 

但是多列索引的利用也是需要條件的,以下形式的查詢語句能夠利用上多列索引:

 

[c-sharp] view plain copy 
  1. SELECT * FROM test WHERE last_name=‘Widenius‘;  
  2.   
  3. SELECT * FROM test WHERE last_name=‘Widenius‘ AND first_name=‘Michael‘;  
  4.   
  5. SELECT * FROM test WHERE last_name=‘Widenius‘ AND (first_name=‘Michael‘ OR first_name=‘Monty‘);  
  6.   
  7. SELECT * FROM test WHERE last_name=‘Widenius‘ AND first_name >=‘M‘ AND first_name < ‘N‘;  

 

以下形式的查詢語句利用不上多列索引:

 

[c-sharp] view plain copy 
  1. SELECT * FROM test WHERE first_name=‘Michael‘;  
  2.   
  3. SELECT * FROM test WHERE last_name=‘Widenius‘ OR first_name=‘Michael‘;  

 

 

多列建索引比對每個列分別建索引更有優勢,因為索引建立得越多就越占磁碟空間,在更新資料的時候速度會更慢。

另外建立多列索引時,順序也是需要注意的,應該將嚴格的索引放在前面,這樣篩選的力度會更大,效率更高。

正確理解Mysql的列索引和多列索引

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.