mysql - 简单的 MySQL 查询看起来真的很慢

标签 mysql performance

我有一个包含大约 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/

相关文章:

mysql - MariaDB 优化和 mysqltuner.pl - RAM 和调整

javascript - 海量谷歌地图。 5000 个位置,5MB。如何让它更快?

python - 具有上限/下限的 Numpy 自定义 Cumsum 函数?

Java Tilemaps 使用 Cliping 来提高帧速率 : What can go WRONG?

java - 如何加快List的迭代速度

php - 代码不会插入数据库

mysql - 使用某些 ID 子句从 MYSQL DB 的所有表中删除所有行

MySql 查询按另一个表中的存在进行排序

mysql - 精确单词匹配(非英文字符)

单进程的Python多处理速度