2009-07-08 43 views
0

表有兩列:爲什麼我在這個非常簡單的MySQL查詢上獲取filesort?

CREATE TABLE items ( 
    k INT auto_increment PRIMARY KEY, 
    val INT UNSIGNED 
) ENGINE=MyISAM; 

我把四個項目中的表:

INSERT INTO items (val) VALUES (12),(23),(45),(56); 

現在,如果我做的:

EXPLAIN SELECT * FROM items ORDER BY k; 

我得到了可怕的 「使用文件排序」。這是怎麼回事?根據this page,它應該使用該索引進行排序。難道我做錯了什麼?

在ubuntu上的XP和5.0.67上測試MySQL 5.0.41。

UPDATE:我在表中添加了1,110,000行,我添加了一個VARCHAR列並填充了文本。表格大小現在是135MB,我仍然在使用「filesort」。

  1. 任何人有關於如何快速添加大量行的任何提示?
  2. 在什麼時候應該考慮一個「足夠大」的查詢優化測試表?

回答

3

或許,也許,它足夠聰明,可以弄清楚整個表格可以放在一個區塊中,而且也不用費力閱讀索引。將整個表讀入內存並對其進行排序可能會更快(如果這甚至是必要的 - 這很有可能已經在塊內按鍵排序)。

用更大的表格試一下。

+0

嘗試了100,000行,結果相同。致力於創建更多行。 – itsadok 2009-07-08 12:36:41

+0

我同意Pax – 2009-07-08 12:54:51

2

可以使用強制:

EXPLAIN SELECT k, val FROM items FORCE INDEX(PRIMARY) ORDER BY k 

我認爲它可能是與索引大小等

如果創建相同的表InnoDB和運行原始順序它的工作原理的MyISAM問題使用PRIMARY索引很好。

相關問題