我有一个包含大约 26
百万条记录的表。有一个 isProcessed 标志和一个时间戳列,我想选择最早的未处理记录。目前大约有 5
百万条记录 isProcessed == 0
。
我执行以下查询,该查询在大约 40
秒内完成。
从 EventData 中选择 *,其中 isProcessed=0 按时间戳 ASC 限制 1 排序;
我在 isProcessed
列上有升序索引,在 timestamp
列上也有升序索引。我需要在两列上建立复合索引吗?
我做错了什么?查询看起来非常简单。
最佳答案
两个单独的索引与复合索引不同。您需要按此顺序,
INDEX(isProcessed, timestamp)
这样,它就可以在索引中找到所需的一行,然后立即访问数据。
“大约 40 秒内完成”——由于 INDEX(isProcessed)
基本上没有用,它扫描了 25M 行的表。
关于mysql - 简单的 MySQL 查询看起来真的很慢,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31078582/