SQL连接不起作用(或非常慢)

时间:2016-08-01 12:08:19

标签: mysql sql join

我在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。我尝试了以下Join命令:

SELECT A.sid FROM A join B on A.sid=B.sid;

此查询从未给我答案。 Tabe A有465420个条目,表B有291326个条目。

为什么不起作用? 是否有太多条目? 或者它与我没有分配主键的事实有关?

2 个答案:

答案 0 :(得分:4)

您的查询没问题。你似乎需要一个索引。我建议B(sid)

您还可以将查询编写为:

select a.sid
from a
where exists (select 1 from b where a.sid = b.sid);

这不会影响效果 - 除非b中有大量重复项 - 但它会消除b中重复项引起的问题。

答案 1 :(得分:0)

尝试

    SELECT A1.sid 
    FROM (select A.sid from A order by sid) A1 
    join (select B.sid from B order by sid) B1 
    on A1.sid=B1.sid;

其他上述情况也适用。你需要索引。