2017-04-02 98 views
0

我正在使用表格加入子查询。INNER JOIN花费更长的时间

子查询运行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秒。我在这里做错了什么?我看到表统计没有问题。此外,子查询不返回JoinID列的任何NULL记录。

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

与查询性能相关的问题应该包括执行计划等 – GurV

+0

表中是否有索引 – TriV

回答

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语句的多个连接。

+0

这些表是不同的。已经编辑了表名。 – par181

+0

好吧,我可以看到你有你的子查询中的一个表。我们不使用这样的子查询。我编辑了我的答案,请检查并尝试,让我知道它是否有效 – EceL