联接中的SQL查询性能
我在SQL中工作,主键SQL表中有26000000条记录 员工表数据:联接中的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 我
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请注意,当您仅从员工中选择时,数据库将在优化阶段删除整个连接操作。如果您提供更多信息,如您使用的是哪一个数据库以及所有表的结构,这将非常有用。