Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/83.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 如何优化连接_Sql_Query Optimization_Teradata - Fatal编程技术网

Sql 如何优化连接

Sql 如何优化连接,sql,query-optimization,teradata,Sql,Query Optimization,Teradata,我正在编写SQL,如下所示。它会导致每次扫描一个大的表TBLA。由于表的设计,我没有任何使用索引的选项。我如何优化下面的一个,使我不必一次又一次地扫描表格。我还需要保留TBLB的条件,即每个连接中TBLB的条件不同。谢谢你的帮助 提前感谢: Sel SUB1.COLX, SUB1.COLY, SUB1.COLZ, SUB2.COLX, SUB2.COLY, SUB2.COLZ, SUB3.COLX, SUB3.COLY, SUB3.

我正在编写SQL,如下所示。它会导致每次扫描一个大的表TBLA。由于表的设计,我没有任何使用索引的选项。我如何优化下面的一个,使我不必一次又一次地扫描表格。我还需要保留TBLB的条件,即每个连接中TBLB的条件不同。谢谢你的帮助

提前感谢:

Sel SUB1.COLX,
    SUB1.COLY,
    SUB1.COLZ,
    SUB2.COLX,
    SUB2.COLY,
    SUB2.COLZ,
    SUB3.COLX,
    SUB3.COLY,
    SUB3.COLZ
FROM    
TBLA 
LEFT  JOIN
(SELECT COLX , COLY, COLZ FROM TBLB WHERE rec='123' )  SUB1
ON TBLA.SK=SUB1.SK
LEFT  JOIN
(SELECT COLX , COLY, COLZ FROM TBLB WHERE rec='456' )  SUB2
ON TBLA.SK=SUB2.SK
LEFT  JOIN
(SELECT COLX , COLY, COLZ FROM TBLB WHERE rec='789' )  SUB3
ON TBLA.SK=SUB3.SK

据猜测,这应该将查询降低到一次扫描/搜索,而不是3次。但是,t此操作假定横向联接每SK值只返回1行:

选择{表A列}, oa.Sub1, oa.Sub2, oa.Sub3 来自dbo.TableA 外部应用当“123”时选择MAXCASE B.rec,然后将COLX结束为Sub1,-如果rec实际上是一个数字数据类型,请不要将其括在单引号中' MAXCASE B.rec当'456'时,则COLX结束为Sub2,-如果rec实际上是一个数字数据类型,请不要将其括在单引号中' MAXCASE B.rec当'789'时,则COLX以Sub3结尾-如果rec实际上是一个数字数据类型,请不要将其用单引号括起来' 从dbo.TableB 其中B.SK=A.SK oa;
当然,这里仍然需要相关的索引;对于TableB,它将位于列SK和rec上,而COLX至少希望包含在INCLUDE中。

如果这或多或少是您的文字查询,那么您几乎肯定会得到产品联接。您没有在两个联接中指定正确的别名:

LEFT  JOIN
(SELECT COLX FROM TBLB WHERE rec='456' )  SUB2
ON TBLA.SK=SUB1.SK
而且,我没有理由加入tblb 3次

Sel *
FROM    
TBLA 
LEFT  JOIN
(SELECT * FROM TBLB WHERE rec in ('123', '456', '789' )  SUB1
ON TBLA.SK=SUB1.SK

示例数据和expect结果将有助于我们为您提供帮助,但看起来您需要一个数据透视/条件聚合?不过,那些关于子句的数据透视/条件聚合也不起作用。例如,SUB1没有定义列SK。请发布完整的DDL,包括indexes@Larnu如果TBLB非常大并且在rec、SK上建立索引,OP使用的方法可能会更好,我们需要查看DDL firstSQL Server或Teradata吗?实际上,这些联接中的表TBLB是相同的?因为OP现在澄清了这不是SQL Server,所以这个答案不适用;弗雷德说:“人们也非常不赞成否定答案。