Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/27.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 server SQL Server中的右连接花费的时间太长_Sql Server - Fatal编程技术网

Sql server SQL Server中的右连接花费的时间太长

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帮

此查询需要7分钟以上的时间


两个表都有大约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