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
此查詢花費的時間超過7分鐘。Right加入SQL Server時間太長
這兩個表都有大約100 000條記錄,每個表中只有一個選項平均運行12秒左右。在執行計劃中,它表示a表的邏輯讀數大約爲8708,操作員成本爲100%。兩個表都具有CI on ID。
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
此查詢花費的時間超過7分鐘。Right加入SQL Server時間太長
這兩個表都有大約100 000條記錄,每個表中只有一個選項平均運行12秒左右。在執行計劃中,它表示a表的邏輯讀數大約爲8708,操作員成本爲100%。兩個表都具有CI on ID。
驗證列中的INDEX
列存在於表A
中。對於在B
中選擇的每一行,將在ID
列中對A
中的行進行查找。如果在該列上不存在索引,則這將導致表掃描,即通過100k行查找以找到具有該特定的行的ID
。效率不高。
PS - 一般的建議:寫不使用RIGHT JOIN
,堅持INNER
,LEFT
和OUTER
加入除非有沒有其他的方法(有幾乎總是)查詢。
使用下面的這個sql來幫助你識別任何缺失的索引。我的猜測是你至少缺少一個。
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
Ew一個正確的加入。試試這個: –
你的查詢會產生一個語法錯誤(沒有'b')。它也(可能)生成大量和大量的數據。你爲什麼想做這個? –
你正在使用兩張相同的表格從右側加入a.id = b.id – Chanukya