2

SQL Server 2008 R2を使用する場合、どちらが優れているか(より高速で、中間テーブルが少なく、メモリ使用量が少ない)、通常の方法ですか?

SELECT staff.id, staff.name, details.address, salary.hourly_rate, 
manager.name, boss.name
FROM STAFF_TABLE staff
LEFT JOIN STAFF_DETAILS_TABLE details on staff.id = details.id
LEFT JOIN STAFF_SALARY_TABLE salary on staff.id = salary.id
LEFT JOIN STAFF_TABLE manager on staff.manager_id = manager.id
LEFT JOIN STAFF_TABLE boss on staff.boss_id = boss.id

また

SELECT staff.id, staff.name, 
(SELECT address FROM STAFF_DETAILS_TABLE  id = staff.id) [address], 
(SELECT hourly_rate FROM STAFF_SALARY_TABLE WHERE id = staff.id) [hourly_rate], 
(SELECT name FROM STAFF_TABLE WHERE id = staff.manager_id) [manager_name], 
(SELECT name FROM STAFF_TABLE WHERE id = staff.boss_id) [boss_name]
FROM STAFF_TABLE staff

ありがとうございました!

4

2 に答える 2

4

すべてのテーブルのすべての適切なIDにインデックスがある場合、クエリは同じ実行プランを生成する必要があります。わずかな違いの1つは、オプティマイザーがインラインクエリを異なる方法で処理する可能性があることです。これは、1行のみを返す必要があるためです(そうでない場合はエラーが生成されます)。

可能であれば、すべてのテーブル参照をfrom句に保持することを強く望んでいます。クエリの保守が簡単になることがわかりました。すべてのテーブル参照が1か所にあります。したがって、明示的な。を使用した形式の方がはるかに好きですjoins

于 2013-01-07T02:31:21.250 に答える
2

それに対する答えを得る唯一の実際の方法は、時間を計り、さまざまなクエリの実行プランを調べることです。SQL Serverはクエリを最適化しようとするので、時間の違いはほとんどないと思います。JOINを使用したバージョンの方がはるかに読みやすく、パフォーマンスに大きな違いがなければ、私の好みになります。

于 2013-01-07T01:31:40.067 に答える