【发布时间】:2015-08-12 15:06:23
【问题描述】:
我在 SQL Server 2008 R2 上有这个简单的查询:
SELECT Art.ID_Articulo,
conv.Factor AS PesoToneladas
FROM dbo.Articulos Art
LEFT JOIN dbo.Conversiones conv
ON conv.ID_Articulo = Art.ID_Articulo
AND conv.ID_Unidad1 = Art.ID_Unidad
表Articulos 分别由ID_Articulo 和ID_Unidad 索引。
表Conversiones 分别由ID_Articulo 和ID_Unidad1 索引。
执行计划显示两个表的表扫描会占用大量资源。
我怎样才能找到原因?
【问题讨论】:
-
您在加入的列上有索引?
-
我们需要查看两个表的脚本(包括索引)。
-
据我所知,如果要检索的数据量非常大,优化器也会选择执行表扫描而不是索引查找(即使该列上有索引) (因为对数据的一次“批量”访问比单独检索每一行要快)。所以,这取决于查询应该返回的数据量..
-
你的桌子有多大?
-
查询优化器很可能已经发现您将读取两个表的所有行,这是由于您在此处构建外键和连接的方式,因此对每个表进行表扫描是最好的方法。它可能会建立一个哈希连接或类似的东西。
标签: sql-server database-optimization