嗨,我有下表T:
id 1 2 3 4
col a b a c
我想做一个选择,当group(col)有count(col)> 1时返回id,col
一种方法是
SELECT id,col FROM T
WHERE col IN (SELECT col FROM T GROUP BY(col) HAVING COUNT(col)>1);
实习生选择(从右侧)返回’a’,主要的一个(左)将返回1,a和3,a
问题是where语句似乎非常慢.在我的实际情况中,内部选择的结果有很多’col’,约70000,而且需要几个小时.
现在,进行内部选择和主要选择获得所有ID和upcs并在本地进行交叉要快得多. MySQL应该能够有效地处理这种查询.
我可以将其中的内容替换为联接或更快的内容吗?
谢谢
最佳答案:
你可以尝试使用INNER JOIN加快速度
>确保你有col的索引
> col,id的覆盖索引可能会让你获得更好的性能
SQL语句
SELECT T.id, T.col
FROM T
INNER JOIN (
SELECT col
FROM T
GROUP BY col
HAVING COUNT(*) > 1
) tcol ON tcol.col = T.col
标签:mysql,where
来源: https://codeday.me/bug/20190515/1111273.html