我在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中找到具有相同sid的B中的条目的行。我尝试了以下Join命令:

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/

10-14 12:56
查看更多