gpt4 book ai didi

sql - mysql子查询出奇地慢

转载 作者:可可西里 更新时间:2023-11-01 07:47:27 26 4
gpt4 key购买 nike

我有一个查询要从另一个子查询中选择。虽然这两个查询看起来几乎相同,但第二个查询(在此示例中)运行得更慢:

SELECT
user.id
,user.first_name
-- user.*
FROM user
WHERE
user.id IN (SELECT ref_id
FROM education
WHERE ref_type='user'
AND education.institute_id='58'
AND education.institute_type='1'
);

此查询需要 1.2s 解释此查询结果:

 id select_type table   type    possible_keys   key key_len ref rows    Extra
1 PRIMARY user index first_name 152 141192 Using where; Using index
2 DEPENDENT SUBQUERY education index_subquery ref_type,ref_id,institute_id,institute_type,ref_type_2 ref_id 4 func 1 Using where

第二个查询:

SELECT
-- user.id
-- user.first_name
user.*
FROM user
WHERE
user.id IN (SELECT ref_id
FROM education
WHERE ref_type='user'
AND education.institute_id='58'
AND education.institute_type='1'
);

运行需要 45 秒,并解释:

 id select_type table   type    possible_keys   key key_len ref rows    Extra
1 PRIMARY user ALL 141192 Using where
2 DEPENDENT SUBQUERY education index_subquery ref_type,ref_id,institute_id,institute_type,ref_type_2 ref_id 4 func 1 Using where

如果我只按索引字段查询,为什么会慢?为什么两个查询都扫描用户表的全长?有什么改进的想法吗?

谢谢。

最佳答案

我不确定为什么当你只选择两列时选择使用索引,而不是当你选择所有列时,但最好只选择你需要的列。此外,尝试使用 JOIN 而不是子查询可能会更好:

SELECT
user.id
user.first_name
FROM user
JOIN education
ON user.id = education.ref_id
AND education.ref_type='user'
AND education.institute_id='58'
AND education.institute_type='1'

关于sql - mysql子查询出奇地慢,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2468945/

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