此查询需要一瞬间
select * from tbl1 limit 0,1
此查询需要第二次
SELECT Distinct(col2) FROM tbl2 WHERE col3 = 2
此查询占用100%cpu并持续190秒(0s fetch)返回结果
select * from tbl1 WHERE ID IN (SELECT Distinct(col2) FROM tbl2 WHERE col3 = 2) limit 0,1
我正在尝试在完整数据集上运行此查询(不只是将其限制为一条记录)
什么可能导致性能问题,我的表结构?
答案 0 :(得分:3)
MySQL中的子查询非常慢。您可以通过加入加快速度:
SELECT A.*
FROM
tbl1 A
INNER JOIN (
SELECT DISTINCT col2
FROM
tbl2
WHERE
col3 = 2
) X ON X.col2 = A.ID
LIMIT 0, 1
更新tbl1
:
UPDATE
tbl1 A
INNER JOIN (
SELECT DISTINCT col2
FROM
tbl2
WHERE
col3 = 2
) X ON X.col2 = A.ID
SET
A.SomeCol = 'value'
答案 1 :(得分:0)
在tbl2
,col3
或(col3,col2)
上(甚至更好)添加索引。
然后使用它(这里不需要DISTINCT
):
SELECT *
FROM tbl1
WHERE ID IN (SELECT col2 FROM tbl2 WHERE col3 = 2)
LIMIT 0,1
甚至更好,以避免IN (SELECT ...)
,此版本:
SELECT *
FROM tbl1 t
WHERE EXISTS
( SELECT *
FROM tbl2 t2
WHERE t2.col3 = 2
AND t2.col2 = t.ID
)
LIMIT 0,1