首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Mysql select查询在大量行的情况下速度变慢

Mysql select查询在大量行的情况下速度变慢
EN

Stack Overflow用户
提问于 2017-08-25 16:54:31
回答 1查看 125关注 0票数 0

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

下面是查询:

代码语言:javascript
运行
复制
select * from transaction 
where id > :pointer
AND col_a = :col_a
AND col_b >= :from 
order by id ASC limit 5000

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

在每次循环后,我会用新的指针值再次运行查询,指针的值是前一个结果集最后一行的id,我不使用OFFSET。最后,我花了半天的时间运行这个查询的脚本,太长了。

那么我该如何解决这个性能问题呢?

EN

Stack Overflow用户

发布于 2017-08-25 17:09:46

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

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

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

在每次循环后,我将使用新的指针值再次运行查询

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

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

票数 1
EN
查看全部 1 条回答
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/45877771

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档