我正在用表格加入子查询。
子查询运行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
答案 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语句中有聚合函数或多个联接,请使用子查询。