2

クエリを高速化しようとしています。それらの多くは非常に複雑です。現在、私は主に、複数のクエリを作成し、それらを結合によってリンクすることでこれを実現しています。

これはベスト プラクティスですか、それともSELECTs 内でSELECTs を使用して、1 つのクエリ内で同じことを達成しようとする必要がありますか?

どちらのオプションも速度に影響しますか、それとも複雑なだけで複雑ですか?

編集: 以下のクエリの例

SELECT HoldingCoNos.ID
FROM (
  SELECT [SearchByName - No Filter].ID
  FROM [SearchByName - No Filter]
  INNER JOIN [SearchByName - Level 1 Subsidiaries]
  ON [SearchByName - No Filter].ID = [SearchByName - Level 1 Subsidiaries].[Holding Company]
) AS HoldingCoNos
GROUP BY HoldingCoNos.ID;

これはすべて 1 つのクエリに含まれています。もう 1 つのオプションは、クエリの FROM セクションの内容を 2 つの個別のクエリとして作成し、それらを保存して内部結合を使用することです。

4

2 に答える 2

3

一般的に言えば、サブクエリは、たとえば親クエリの各行に対して実行されます

Select * from employees where name IN (project_id=1 の Team_project から Manager_name を選択)

従業員テーブルのすべての行に対して select manager_name を実行して、クエリがキャッシュされていることを許可された名前を比較します。これにより高速になりますが、それでもなお多くの作業が必要です。

ただし、詳細については、このディスカッションを参照してください: Subquery v/s inner join in sql server

于 2013-09-26T13:24:06.453 に答える
2

クエリの例を見て、いくつかのことを指摘できます。

  • ここではサブクエリは必要ありません。サブクエリから単一のフィールドを選択し、そのフィールドでグループ化しています。代わりに、外側のクエリを削除して、select distinct [SearchByName - No Filter].ID.
  • 知覚は現実の 10 分の 9 です。クエリが複雑に見えるのは、短いテーブル エイリアスではなく完全なテーブル名をどこでも使用しているためです。エイリアスとの違いに注目してください (そして少し注意深い書式設定)。クエリが大きくなると、これは数倍に拡大されます。

SQL:

select distinct sbnnf.ID as HoldingCoID
from [SearchByName - No Filter] as sbnnf
inner join [SearchByName - Level 1 Subsidiaries] as sbnl1s
on sbnnf.ID = sbnl1s.[Holding Company];
于 2013-09-27T00:24:29.210 に答える