我用一个简单的MySQL索引遇到了一个奇怪的问题。

我得到了下表:

CREATE TABLE `import` (
  `import_id` int(11) NOT NULL AUTO_INCREMENT,
  `import_title` text,
  `import_url` text,
  `import_description` text,
  `import_completed` enum('y','n') NOT NULL DEFAULT 'n',
  `import_user` int(11) DEFAULT NULL,
  `import_added` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
  PRIMARY KEY (`import_id`),
  KEY `import_added` (`import_added`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8;


在该表中有几千行,我想使用以下选择子句获得前100行:

SELECT
  import_id,
  import_title,
  import_url,
  import_description,
  import_user,
  import_added
FROM import
WHERE import_completed = 'n'
ORDER by import_added ASC
LIMIT 0,100


当我使用DESCRIBE仔细查看查询时,我的本地计算机使用“添加的”索引,并在几毫秒之内返回了100行,如预期的那样。

当我在“生产”服务器上使用具有相同结构和内容的相同数据库并在其中使用DESCRIBE时,它表明也使用了索引,但是它返回该表中的所有行,并且查询大约需要6秒钟。

我想念什么?为什么索引不能正常工作?

最佳答案

索引使用错误

...
KEY `import_added` (import_completed, import_added) ...


并制定查询执行计划

desc extended SELECT
  import_id,
  import_title,
  import_url,
  import_description,
  import_user,
  import_added
FROM import
WHERE import_completed = 'n'
ORDER by import_added ASC
LIMIT 0,100;

关于mysql - Mysql索引使用不正确,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/4489632/

10-11 03:31
查看更多