mysql - SQL 连接不工作(或非常慢)

标签 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 条目的行。我尝试了以下加入命令:

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/

相关文章:

php - 日期时间格式的 mysql 列中有 2 小时的差异

asp.net - 什么是 Microsoft Jet 数据库?它是否适合包含敏感信息的小型应用程序?

sql - Oracle (+) 外连接和常量值

sql - 为什么 SQL 连接在 Oracle 中失败?

SQL:列出多个连接语句中的重复记录?

MySQL:选择连接的行,其中子项不属于特定的父项 ID

php - MySQL 排序问题

php - 将 blob 插入数据库时​​未定义索引 php

mysql - 使用 JDBI SQL 对象 API 同时检索或创建新行

mysql - 在 SQL 表中添加特定字段