由于单独的索引,MySQL查询速度慢?

时间:2013-03-19 20:40:32

标签: mysql myisam

这是我的情况。我有一个MySQL MyISAM表,包含大约400万条记录,总共有13.3 GB的数据。该表包含从外部系统接收的消息。表中的两列跟踪时间戳和布尔值是否处理消息。

使用此查询时:

SELECT MIN(timestampCB) FROM webshop_cb_onx_message

结果几乎立即出现。

但是,我需要找到未处理邮件的最早时间戳,如下所示:

SELECT MIN(timestampCB ) FROM webshop_cb_onx_message WHERE handled = 0

此查询的结果在大约3分钟后显示,这对于我正在编写的脚本来说太慢了。

两列都是单独索引的,而不是一起索引。但是,考虑到已经存在的数据量,在表中添加索引将花费极长的时间。

我的问题是否源自两个列都是分开索引的事实,如果是这样,除了添加另一个索引之外,是否有人能解决我的问题?

1 个答案:

答案 0 :(得分:2)

通常建议,如果索引的选择性超过20%,那么全表扫描优于索引访问。这意味着你的处理索引可能实际上不会导致使用索引,而是给定选择性的全表扫描。

复合索引handled, timestampCB实际上可以提高性能,因为它是一个复合索引,即使选择性不是很大,MySQL很可能仍会使用它 - 即使它没有你可以{{3 }}