内部加入需要更长时间

时间:2017-04-02 12:54:49

标签: sql-server sql-server-2012

我正在用表格加入子查询。

子查询运行5秒(返回20条记录),表格只有4行。

子查询:

Select ID, Name, JoinID
FROM tableX
JOIN ..

子查询样本结果:

1, xx, 1
2, yy, 2
3, zz, 1
4, vv, 2
5, bb, 1

TableY(ID,描述): 数据

1, test1
2, test2
3, test3
4, test4

我的以下查询花了超过30秒。我在这做错了什么?我认为表Stats没有问题。此外,子查询不返回JoinID列的任何NULL记录。

Select sub.*, tab.*
from
(
sub query
) sub
Join tableY on tableY.ID = sub.JoinID

1 个答案:

答案 0 :(得分:0)

在某些情况下,加入子查询会很慢。如果您的表没有PK或FK索引,则加入对于数据库引擎来说会很复杂。

首先检查你的表格。如果您没有,则将主键添加到ID列。在TABLEX中的JOINID上创建外键。如果你已经完成了相同的结果,那么你必须在JOINID上创建索引,如果这不起作用,那么你必须检查你的服务器配置,检查数据库引擎文档(Oracle,Mssql,mysql等)。

您可以使用此SQL语句在不使用子查询的情况下获得相同的结果,

SELECT X.*, Y.*
FROM TABLEX as X 
JOIN TABLEX as Y ON (X.JOIN_ID=Y.ID)

如果在子查询sql语句中有聚合函数或多个联接,请使用子查询。