繁体   English   中英

SQL查询执行时间过多

[英]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.closeduser.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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM