MySQL - WHERE IN 导致 100% cpu 并且没有结果
此查询需要一秒钟
select * from tbl1 limit 0,1
此查询需要一秒钟
SELECT Distinct(col2) FROM tbl2 WHERE col3 = 2
此查询占用 100% cpu,需要 190 秒的持续时间(0 秒获取)才能返回结果
select * from tbl1 WHERE ID IN (SELECT Distinct(col2) FROM tbl2 WHERE col3 = 2) limit 0,1
我试图在完整数据集上运行此查询(而不仅仅是将其限制为一条记录)
什么可能导致性能问题,我的表结构?
This query takes a split second
select * from tbl1 limit 0,1
This query takes a second
SELECT Distinct(col2) FROM tbl2 WHERE col3 = 2
This query eats 100% cpu and takes 190 seconds duration (0s fetch) to return the result
select * from tbl1 WHERE ID IN (SELECT Distinct(col2) FROM tbl2 WHERE col3 = 2) limit 0,1
I am trying to run this query on the full data set (not just limiting it to one record)
What could be causing the performance problem, my table structures?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
在
tbl2
、col3
或(甚至更好)(col3,col2)
上添加索引。然后使用这个(这里不需要
DISTINCT
):或者更好的是,避免
IN (SELECT ...)
,这个版本:Add an index on
tbl2
, oncol3
or (even better) on(col3,col2)
.Then use this (no need for the
DISTINCT
here):or even better, to avoid the
IN (SELECT ...)
, this version:MySQL 中的子查询是出了名的慢。您可以通过连接来加快速度:
要更新
tbl1
:Subqueries in MySQL are notoriously slow. You can speed this up with a join:
To update
tbl1
: