2013-07-19 103 views
1

的順序假設我有對富表兩列索引的(X,Y)是否創建索引事

指數如果我搜索它作爲select * from foo where x=1 and y=2select * from foo where y=2 and x=1。在mysql上它真的很重要嗎?

+2

通常被視爲在SQL(任何版本),你告訴引擎*你想要什麼*,**不** *如何做到這一點*。優化程序的工作是確定如何最好地執行這項工作。由於你的兩個查詢之間沒有邏輯*差異,它們最終應該被優化。 –

回答

1

簡答 - 不,沒關係。 MySQL將嘗試挑選最佳索引來使用,而不管該列是在您的WHERE子句中首先出現還是第二次出現。

您可以通過在每一個上運行EXPLAIN聲明來證明這一點,以獲得有關how MySQL will execute the query的更多信息 - 它應該顯示在兩種情況下都使用相同的索引。


如果你談論的是列在索引中出現的順序 - (x,y) VS (y,x),它也不會在這種情況下,由於您使用的兩列選擇無所謂。如果您有時僅選擇其中一列,那麼該列應該首先出現在索引中,這樣MySQL可以在只提供一個值時使用部分索引來幫助優化查詢。

0

這對於查詢優化到某些查詢的Postgre非常有用,但MySQL只是忽略索引順序(ASC,DESC)我不知道哪個版本會支持這個。

'我想' 這是一個工作臺的bug,但wockbench隊anwser我:

我們的手冊,http://dev.mysql.com/doc/refman/5.5/en/create-index.html, 說:

「的index_col_name規約可以以ASC或DESC結束。這些 關鍵字可用於指定升序 或降序索引值存儲的將來擴展。目前,它們被解析,但 被忽略;索引值始終以升序存儲。

因此,可能這是您在Workbench中看到的原因:它允許添加該DESC選項,但服務器本身忽略它。

早些時候的評論可以在http://bugs.mysql.com/65893