Sql server SQL Server中的右连接花费的时间太长
此查询需要7分钟以上的时间Sql server SQL Server中的右连接花费的时间太长,sql-server,Sql Server,此查询需要7分钟以上的时间 两个表都有大约100000条记录,每个表中的一个select平均运行约12秒。在执行计划中,表a的逻辑读取约为8708,并且100%的操作员成本。两个表都有ID上的CI。验证ID列上的索引是否存在于表A中。对于在B中选择的每一行,将在ID列中查找a中的行。如果该列上不存在索引,这将导致表扫描,即通过100k行查找具有特定ID的行。效率不高 PS-一般建议:编写不使用右连接、坚持使用内部连接、左连接和外部连接的查询,除非没有其他方法(几乎总是这样)。使用下面的sql帮
两个表都有大约100000条记录,每个表中的一个select平均运行约12秒。在执行计划中,表a的逻辑读取约为8708,并且100%的操作员成本。两个表都有ID上的CI。验证
ID
列上的索引是否存在于表A
中。对于在B
中选择的每一行,将在ID
列中查找a
中的行。如果该列上不存在索引,这将导致表扫描,即通过100k行查找具有特定ID
的行。效率不高
PS-一般建议:编写不使用右连接
、坚持使用内部连接
、左连接
和外部连接的查询,除非没有其他方法(几乎总是这样)。使用下面的sql帮助您识别任何缺少的索引。我猜你至少少了一个
SELECT
b.1, b.2, b.3, b.4, a.4, a.3, a.5
FROM
a
RIGHT JOIN
b ON a.id = b.id
我是右会合。尝试以下操作:您的查询将生成语法错误(没有b
)。它还(可能)生成了大量的数据。你为什么要这样做?你使用的是a上右连接a的两个相同的表。右连接后应该有“b”。连接不会花费很多时间。但是,没有适当索引的查询确实需要很多时间。发布执行平面、表的模式和表上定义的任何索引。否则,这个问题将不得不结束——没有相关信息。
SELECT
statement AS [database.scheme.table],
column_id , column_name, column_usage,
migs.user_seeks, migs.user_scans,
migs.last_user_seek, migs.avg_total_user_cost,
migs.avg_user_impact
FROM sys.dm_db_missing_index_details AS mid
CROSS APPLY sys.dm_db_missing_index_columns (mid.index_handle)
INNER JOIN sys.dm_db_missing_index_groups AS mig
ON mig.index_handle = mid.index_handle
INNER JOIN sys.dm_db_missing_index_group_stats AS migs
ON mig.index_group_handle=migs.group_handle
ORDER BY mig.index_group_handle, mig.index_handle, column_id