sql-server – 使用DISTINCT作为子查询中的提示有用吗?
在以下示例中添加DISTINCT是否会对查询运行时刻发生任何影响?
SELECT * FROM A WHERE A.SomeColumn IN (SELECT DISTINCT B.SomeColumn FROM B) 办理要领当想知道这样的工作时,你应该较量查询的执行打算.查询的执行打算的外形虽然会有所差异,详细取决于表中有几多行以及界说了哪些索引. 其它两个要测试的明明案例的执行打算,B中的行多于A和表中的行数相称,也表现了查询的完全沟通的执行打算. 更新 在举办查询优化之前,查询将经验简化阶段.您可以行使跟踪符号8606查察逻辑树的外面. 查询的输入树明明差异,但在简化后它们是沟通的. 参考:More Undocumented Query Optimizer Trace Flags和Query Optimizer Deep Dive – Part 2 行使distinct的输入树和简化树举办查询: *** Input Tree: *** LogOp_Project QCOL: [xx].[dbo].[A].SomeColumn LogOp_Select LogOp_Get TBL: A A TableID=213679909 TableReferenceID=0 IsRow: COL: IsBaseRow1002 ScaOp_SomeComp 2 ScaOp_Identifier QCOL: [xx].[dbo].[A].SomeColumn LogOp_GbAgg OUT(QCOL: [xx].[dbo].[B].SomeColumn,) BY(QCOL: [xx].[dbo].[B].SomeColumn,) LogOp_Project LogOp_Project LogOp_Get TBL: B B TableID=229679966 TableReferenceID=0 IsRow: COL: IsBaseRow1006 AncOp_PrjList AncOp_PrjList AncOp_PrjList AncOp_PrjList ******************* *** Simplified Tree: *** LogOp_LeftSemiJoin LogOp_Get TBL: A A TableID=213679909 TableReferenceID=0 IsRow: COL: IsBaseRow1002 LogOp_Get TBL: B B TableID=229679966 TableReferenceID=0 IsRow: COL: IsBaseRow1006 ScaOp_Comp x_cmpEq ScaOp_Identifier QCOL: [xx].[dbo].[A].SomeColumn ScaOp_Identifier QCOL: [xx].[dbo].[B].SomeColumn ******************* 用于查询的输入树和简化树不行使distinct: *** Input Tree: *** LogOp_Project QCOL: [xx].[dbo].[A].SomeColumn LogOp_Select LogOp_Get TBL: A A TableID=213679909 TableReferenceID=0 IsRow: COL: IsBaseRow1002 ScaOp_SomeComp 2 ScaOp_Identifier QCOL: [xx].[dbo].[A].SomeColumn LogOp_Project LogOp_Get TBL: B B TableID=229679966 TableReferenceID=0 IsRow: COL: IsBaseRow1006 AncOp_PrjList AncOp_PrjList ******************* *** Simplified Tree: *** LogOp_LeftSemiJoin LogOp_Get TBL: A A TableID=213679909 TableReferenceID=0 IsRow: COL: IsBaseRow1002 LogOp_Get TBL: B B TableID=229679966 TableReferenceID=0 IsRow: COL: IsBaseRow1006 ScaOp_Comp x_cmpEq ScaOp_Identifier QCOL: [xx].[dbo].[A].SomeColumn ScaOp_Identifier QCOL: [xx].[dbo].[B].SomeColumn ******************* (编辑:湖南网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |