联接中的SQL查询性能

联接中的SQL查询性能,sql,Sql,我在SQL中工作,主键SQL表中有26000000条记录 员工表数据: Id | Name | DepartmentId -------------------------- 1 | AA | 1 2 | BB | 1 3 | CC | 2 部门表数据: Id | Name | ---------------- 1 | IT | 2 | Network | 为员工创建索引。部门ID 我

我在SQL中工作,主键SQL表中有26000000条记录

员工表数据:

    Id | Name | DepartmentId
   --------------------------
    1  | AA   |    1
    2  | BB   |    1
    3  | CC   |    2
部门表数据:

Id  | Name     |
----------------
1   |  IT      |
2   |  Network | 
员工创建索引。部门ID

我有一个疑问如下:

Select E.Id, E.Name, E.DepartmentId
from Employees E
JOIN Department D
ON E.DepartmentId = D.Id
上述查询在2秒内执行并返回所有记录。 但是,当我将部门名称包括在选择列表中时,需要花费大约10秒的时间

Select E.Id, E.Name, E.DepartmentId,D.Name
from Employees E 
JOIN Department D
ON E.DepartmentId = D.Id
这里的问题是什么

提前感谢。

对于此查询:

select E.Id, E.Name, E.DepartmentId, D.Name
from Employees E join
     Department D
     on E.DepartmentId = D.Id;
最佳索引是
部门(Id、名称)
。如果
Department(Id)
是主键,您可能已经基本上拥有了该索引


也许更重要的问题是结果集的大小。部门名称可能很大(特别是如果它被声明为
char()
而不是
varchar()
)。问题可能只是部门名称的大小。

正如Gordon所提到的,问题不在于表与索引的连接,而在于结果集中返回的数据量(来自附加部门名称),这些数据量显示在终端或gui中


此外,您还应该能够在MySQL中使用EXPLAIN关键字来帮助识别任何索引问题

我删除了不兼容的数据库标记。请用您真正使用的数据库标记问题。您的
员工
上的
部门ID
是否已编制索引?请记住,您选择的所有记录和JSON中的返回数据将是大尺寸的,并且需要考虑传输数据的网络速度。您的问题并添加执行计划。text请注意,当您仅从员工中选择时,数据库将在优化阶段删除整个连接操作。如果您提供更多信息,如您使用的是哪一个数据库以及所有表的结构,这将非常有用。