MySQL查询速度慢是因为单独的索引?

标签 mysql myisam

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

使用此查询时:

SELECT MIN(timestampCB) FROM webshop_cb_onx_message

结果几乎立即显示。

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

SELECT MIN(timestampCB ) FROM webshop_cb_onx_message WHERE handled = 0

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

两列都是单独索引的,而不是一起索引的。然而,考虑到表中已有的数据量,向表添加索引将花费非常长的时间。

我的问题是否源于两列都是单独索引的事实,如果是这样,除了添加另一个索引之外,是否有人可以解决我的问题?

最佳答案

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

handled, timestampCB 的复合索引实际上可以提高复合索引的性能,即使选择性不是很好 MySQL 很可能仍然会使用它 - 即使它没有你可以force it's use .

关于MySQL查询速度慢是因为单独的索引?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15509999/

相关文章:

php - 数据库在迁移期间未配置 laravel

php - 返回 Mysqli execute() 的结果

MySQL 多列索引

具有 SMALLINT id 字段的 MySQL 数据库表

mysql - EasyPHP 无法连接到本地主机(端口 8080)

Java 通过 Servlet 连接到远程 MySQL 数据库

mysql - 使用 MyISAM 表进行 Rails 单元测试

mysql - 跨多个 MySQL 表更改一个字段

mysql - 如何在不锁定的情况下将索引应用于 MySQL/MyISAM 表?

mysql - MYISAM 的性能问题