Mysql选择查询减慢了大量的行

时间:2017-08-25 08:54:31

标签: mysql select


我有一个包含10列的表,它包含大约800万行。我在这张桌子上做统计工作。问题是当我运行更多时间时,当id增长时,选择查询的速度会更慢 这是查询:

select * from transaction 
where id > :pointer
AND col_a = :col_a
AND col_b >= :from 
order by id ASC limit 5000

查询中的3个字段都已创建索引 在每个循环之后,我将使用新的指针值再次运行查询,指针的值是前一个结果集的最后一行的id,我不使用OFFSET。 最后,我花了半天时间用这个查询运行脚本太长了 那么我该如何解决这个性能问题。

1 个答案:

答案 0 :(得分:1)

  

查询中的3个字段都已创建索引

Mysql在查询中每个表只能使用一个索引。如果您为每个字段创建了单独的索引,那么MySQL只能使用其中一个来加速查询,而不是全部3个。

我会在id, col_a, col_b字段上创建一个多列索引(按此顺序)。这样,单个索引可用于满足where条件和order by中的所有3个条件。

  

每次循环后,我将再次使用新指针值

运行查询

您的代码建议您使用某种参数化查询,但我们无法确定它是否是正确的MySQL预处理语句。如果不是,那么请考虑在此过程中使用MySQL预处理语句。

在循环之前准备查询,然后在循环中调整参数,然后再次执行预准备语句。这样MySQL只会解析一次查询,而不是每次代码循环。