簡體   English   中英

多列索引與多個索引

[英]Multiple Column Index vs Multiple Indexes

我在MySQL數據庫中有下表:

CREATE TABLE `secondary_images` (
  `imgId` int(10) unsigned NOT NULL AUTO_INCREMENT,
  `primaryId` int(10) unsigned DEFAULT NULL,
  `view` varchar(255) DEFAULT NULL,
  `imgURL` varchar(255) DEFAULT NULL,
  `imgDate` datetime DEFAULT NULL,
  PRIMARY KEY (`imgId`),
  KEY `primaryId` (`primaryId`),
  KEY `imgDate` (`imgDate`)
) ENGINE=MyISAM  DEFAULT CHARSET=latin1 ;

SQL將如下所示:

SELECT imgURL, view FROM secondary_images 
WHERE primaryId={$imgId} ORDER BY imgDate DESC

正如你可以看到我做了兩個primaryIdimgDate ,索引鍵。 我背后的想法是因為WHERE子句的查詢結果使用primaryIdORDER子句使用imgDate

我的問題是,現在使用多索引會更好嗎? 還是我應該使用多列索引(目前我不太了解)?

這是我從EXPLAIN得到的:

id = 1   
select_type = simple      
table = secondary_images         
type = ref
possible_keys = primaryId
key = primaryId
key_len = 5
ref = const
rows = 1
extra = Using where; Using filesort

注意:這不是使用多列索引,這是使用上表說明的結果。

您應該在(primaryId,imgDate)上使用多列索引,以便MySQL能夠使用它來選擇行和排序。

如果用於排序的所有列都不在用於選擇的索引中,則MySQL使用“ filesort ”策略,該策略包括對所有行進行排序(如果行太多,則在內存中;否則在磁盤上)。

如果用於排序的所有列都在索引中,則MySQL使用索引來獲取行順序(有一些限制)。

MySQL對索引使用樹結構。 這允許直接訪問鍵而無需排序。

多列索引基本上是列級聯的索引。 這樣,MySQL可以找到與primaryId={$imgId}匹配的第一行,然后以正確的順序直接訪問所有其他行。

隨着對單排索引primaryId ,MySQL能夠找到相匹配的所有行primaryId={$imgId}但它會發現在沒有特定的順序行; 因此,之后必須對其進行排序。

EXPLAINORDER BY優化

您的解釋如下:

[id] => 1 
[select_type] => SIMPLE 
[table] => secondary_images 
[type] => ref 
[possible_keys] => primaryId 
[key] => primaryId 
[key_len] => 5 
[ref] => const 
[rows] => 1 
[Extra] => Using where; Using filesort 

讓我們來看一看。

[id] => 1 

意味着我們正在談論第一個表。 您僅在語句中調用一個表。

[select_type] => SIMPLE 

我們正在做一個簡單的選擇。

[table] => secondary_images 

有問題的表名。

[type] => ref 

選擇類型,對於聯接最重要。

[possible_keys] => primaryId 

這是一個重要的字段 :它顯示哪些鍵可以用來幫助查詢更快地執行。 在這種情況下,只有主鍵才有用。

[key] => primaryId 

這是一個重要的領域 :它顯示了最終使用了哪些密鑰。 在這種情況下,為主鍵。

[key_len] => 5 
[ref] => const 
[rows] => 1 

猜測查詢檢查的行數。

[Extra] => Using where; Using filesort 

最重要的領域恕我直言。 -使用位置:您正在使用位置語句。 好的 -使用文件排序:查詢的結果太大,無法在內存中排序。 MySQL必須將其寫入文件,對文件進行排序,然后輸出。 這意味着磁盤訪問,並且將減慢一切。 添加有助於排序的索引通常會有所幫助,但是解決“使用文件排序”本身就是一章。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM