[英]SQL query takes too much time to execute
我有一个查询,该查询需要太多时间来执行。 查询是:
SELECT id, name
FROM user
WHERE id IN ( SELECT DISTINCT ( user_id )
FROM `webchat`
WHERE closed = 0 )
webchat.closed和user.id是索引 。 查询需要6秒钟才能完成。
但是,如果我执行此查询:
SELECT DISTINCT ( user_id )
FROM `webchat`
WHERE closed = 0
只需0.00002秒即可完成。 它返回两个结果16023和14020。如果执行此查询,则:
SELECT id, name FROM user WHERE id IN (16023, 14020)
只需0.00004秒即可完成。
那么,为什么第一个查询需要6秒钟才能完成?
尝试这种方式:
SELECT DISTINCT user.id, user.name
FROM user INNER JOIN `webchat` on user.id = `webchat`.user_id
WHERE `webchat`.closed = 0
这是您的查询:
SELECT u.id, u.name
FROM user u
WHERE u.id IN ( SELECT DISTINCT ( user_id ) FROM webchat WHERE closed = 0 )
首先,在子查询中, distinct
是多余的。 其次,许多数据库处理的exists
要比in
。 尝试这个:
SELECT u.id, u.name
FROM user u
WHERE EXISTS (select 1 from webchat wc where wc.closed = 0 and wc.user_id = u.id);
索引将有助于此查询。 尝试使用复合索引webchat(user_id, closed)
。
尝试这个:
SELECT id, name
FROM user
INNER JOIN `webchat` on `webchat`.user_id = user.id and `webchat`.closed = 0
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.