col mysql_对于MySQL的’where col in(list)’的替代方案

嗨,我有下表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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值