MySql时间戳索引并没有提高性能

问题描述 投票:0回答:1

使用MySql 3.23(别无选择),我有一个包含超过500万行的表。我正在查询名为 last_mod_date 的列,它是时间戳 (14)。

SELECT * FROM mytable WHERE last_mod_date >= 'some_date';

(是的,我确实需要返回所有所有列。)我注意到查询花费了很长时间。通常为30-50秒。我向表中添加了一个索引,如下所示。 。 .

ALTER TABLE mytable ADD INDEX last_mod_date_idx (last_mod_date);

索引已成功添加(花了几分钟),当我运行 show index from mytable; 重新运行查询时,我可以看到它,我对结果感到失望。查询仍需要 30-40 秒以上。有人对我可以采取的提高绩效的步骤有任何建议吗?

mysql query-optimization
1个回答
0
投票

我已经实施了一种修复,如下所示。

我感兴趣的所有表都有一个 Id 整数列。这是主键。我注意到,当我将 Id 添加到 where 子句时,结果有所改善。因此,现在,我已将 Id 阈值的概念添加到我查询的每个表的代码中。对于具有 5.7m 行的表,我知道我对前 5m 行不感兴趣。在这种情况下,我会将阈值设置为 5000000。我的查询现在如下所示

SELECT * FROM mytable WHERE Id > some_threshold and last_mod_date >= 'some_date';

我的代码运行 5 个此类查询。整个操作从几分钟缩短到7-10秒。

© www.soinside.com 2019 - 2024. All rights reserved.