0

表有两列:

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;

我得到了可怕的“使用文件排序”。这是怎么回事?根据此页面,它应该使用索引进行排序。难道我做错了什么?

在 XP 上的 MySQL 5.0.41 和 ubuntu 上的 5.0.67 上测试。

更新:我在表中添加了 1,110,000 行,我添加了一个 VARCHAR 列并用文本填充它。表大小现在为 135MB,我仍在“使用文件排序”。

  1. 任何人都有关于如何快速添加大量行的任何提示?
  2. 在什么时候我应该考虑一个“足够大”的表来进行查询优化测试?
4

2 回答 2

3

好吧,也许,只是也许,它足够聪明,可以计算出整个表可以放在一个块中,并且不需要读取索引。将整个表读入内存并对其进行排序可能会更快(如果这甚至是必要的 - 很有可能它已经在块内按键排序)。

用更大的桌子试试。

于 2009-07-08T12:26:49.977 回答
2

您可以强制使用:

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

我认为这可能是与索引大小等有关的 MyISAM 问题。

如果您创建与 InnoDB 相同的表并运行原始顺序,则使用 PRIMARY 索引可以正常工作。

于 2009-07-08T12:35:49.790 回答