5
CREATE TABLE IF NOT EXISTS `newsletters`
(
`id` int(11) NOT NULL auto_increment,
`last_update` int(11) default NULL,
`status` int(11) default '0',
`message_id` varchar(255) default NULL,
PRIMARY KEY (`id`),
KEY `status` (`status`),
KEY `message_id` (`message_id`),
KEY `last_update` (`last_update`)
)
ENGINE=MyISAM DEFAULT CHARSET=latin1;
查询:
SELECT id, last_update
FROM newsletters
WHERE status = 1
ORDER BY last_update DESC
LIMIT 0, 100
newsletters
表有超过300万条记录- 查询接管26秒执行
查询说明:
id select_type table type possible_keys key key_len ref rows Extra
1 SIMPLE newsletters range status status 5 NULL 3043354 Using where; Using filesort
那么为什么不使用filesort
,以及它是如何一个range
查询?
KEY应该应用与INDEX相同的索引。 – 2011-05-22 08:17:36
这样做,我是一个业余的优化/索引,所以我没有真正考虑尝试索引多个列。 @Baez:你能说说你的意思吗? – HyderA 2011-05-22 08:23:19
@gAMBOOKa:为了想象什么样的索引对你最有帮助,试着想一下列表,按照什么顺序最能帮助_you_如果你是电脑,并且必须快速找到正确的记录,并返回询问信息。在这种情况下,您需要一个所有记录的列表(因为每个索引需要是所有记录)按状态排序(因为您只对1s感兴趣),然后按last_update排序(这样您可以快速获得前100名)。如果您将该ID添加到列表中,那么您可以获取所有信息而无需返回主表。 – Avi 2011-05-22 10:32:33