我在 mysql 中有以下表:
表A:
+-------+-------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+-------+-------------+------+-----+---------+-------+
| sid | varchar(50) | YES | | NULL | |
| type | int(11) | YES | | NULL | |
+-------+-------------+------+-----+---------+-------+
表 B:
+---------+-------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+---------+-------------+------+-----+---------+-------+
| channel | varchar(20) | YES | | NULL | |
| sid | varchar(50) | YES | | NULL | |
| type | varchar(20) | YES | | NULL | |
+---------+-------------+------+-----+---------+-------+
我想从 A 中找到在 B 中具有相同 sid 条目的行。我尝试了以下加入命令:
SELECT A.sid FROM A join B on A.sid=B.sid;
这个问题从来没有给我答案。 表A有465420个条目,表B有291326个条目。
为什么不起作用? 条目太多了吗? 或者它与我没有分配主键这一事实有什么关系吗?
最佳答案
您的查询很好。您似乎需要一个索引。我会建议 B(sid)
。
您也可以将查询写成:
select a.sid
from a
where exists (select 1 from b where a.sid = b.sid);
这不会影响性能——除非 b
中有很多重复项——但它会消除由 b
中的重复项引起的问题。
关于mysql - SQL 连接不工作(或非常慢),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38698481/