0
セットアップ
いくつかのソースからオートコンプリートの電子メールアドレスをフィルタリングするために複数のテーブルを結合しています。私は単純化のためにこの例では2つしか含んでいませんが、実際には現在6つ使用しています。合計結果を制限する前に結合クエリを制限する方が効率的ですか?
使用してSQL Server 2008の
現在のクエリ
SELECT TOP 20 * FROM (
SELECT
ID AS id,
LastName + ', ' + FirstName AS label,
Email AS identifier,
'person' AS source_type
FROM Persons
WHERE (LastName + ', ' + FirstName LIKE 'a%' OR FirstName + ' ' + LastName LIKE 'a%')
AND DATALENGTH(Email) > 0 AND Email IS NOT NULL
UNION
SELECT
Company AS id,
Name AS label,
Email AS identifier,
'company' AS source_type
FROM Companies
WHERE (Name LIKE 'a%')
AND DATALENGTH(Email) > 0 AND Email IS NOT NULL
) temp ORDER BY label ASC
質問
それは&制限ユニオンクエリを-注文は事前に、より効率的またはよりパフォーマンスだろうか?次のようなものがあります。
SELECT TOP 20 * FROM (
SELECT TOP 20
ID AS id,
LastName + ', ' + FirstName AS label,
Email AS identifier,
'person' AS source_type
FROM Persons
WHERE (LastName + ', ' + FirstName LIKE 'a%' OR FirstName + ' ' + LastName LIKE 'a%')
AND DATALENGTH(Email) > 0 AND Email IS NOT NULL
ORDER BY LastName ASC, FirstName ASC
UNION
SELECT TOP 20
ID AS id,
Name AS label,
Email AS identifier,
'company' AS source_type
FROM Companies
WHERE (Name LIKE 'a%')
AND DATALENGTH(Email) > 0 AND Email IS NOT NULL
ORDER BY Name ASC
) temp ORDER BY label ASC