MySql在非常大的表上查询速度慢

时间:2014-10-31 16:36:02

标签: php mysql codeigniter

我有一张包含85,000条记录的表格,每天都会增长!

我正在运行查询,例如:

SELECT * FROM `table`  
WHERE `start_timestamp` >= 'TIMESTAMP'  
AND `end_timestamp` <= 'TIMESTAMP'

这个查询实际上需要永远运行85,000行,更不用说1,000,000

现在时间戳的字段实际上是一个大整数,它保存着来自php的时间戳。该查询通过带有codeigniter query()

的php运行

如果日期范围,它会非常快速地运行。 31天,但超过它的速度非常慢。我也在where子句的那两列上有索引。

2 个答案:

答案 0 :(得分:2)

这些是一些改善查询性能的建议

  1. 将SELECT *替换为您想要的唯一字段
  2. 在您想要作为输出的表格字段上添加索引
  3. 在需要时应用LIMIT标记。不要选择所有记录
  4. 触发两个不同的查询:一个用于计算记录总数,另一个用于获取每页记录数(例如10,20,50等等)
  5. 如果适用,请创建数据库视图并从中获取数据而不是表

答案 1 :(得分:1)

由于start_timestampend_timestamp是您查询的唯一条件,我建议您为它们创建索引。

CREATE INDEX `idx_timestamp` ON `table` (`start_timestamp`, `end_timestamp`);

这应该优化MySQL使用指定标准定位记录的能力。