gpt4 book ai didi

Mysql select 查询在大量行上变慢

转载 作者:行者123 更新时间:2023-11-29 10:39:03 27 4
gpt4 key购买 nike


我有一个有 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。最后我花了半天的时间来运行这个查询的脚本,太长了。
那么我该如何解决这个性能问题。

最佳答案

Both of 3 fields in the query have been created index

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

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

After each loop, I will run query again with new pointer value

您的代码建议您使用某种参数化查询,但我们无法确定它是否是正确的 MySQL 准备好的语句。如果不是,则考虑为此过程使用 MySQL 准备好的语句。

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

关于Mysql select 查询在大量行上变慢,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45877771/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com