2

複数のテーブルからクエリを実行してみましたORDER BY

SELECT TOP 50
  TBL_ContentsPage.NewsId,
  TBL_ContentsPage.author,
  TBL_ContentsPage.Header,
  TBL_ContentsPage.TextContent,
  TBL_ContentsPage.PostedDate,
  TBL_ContentsPage.status,
  TBLTempSettings.templateID
FROM TBL_ContentsPage
INNER JOIN TBLTempSettings
  ON TBL_ContentsPage.NewsId = TBLTempSettings.newsId
WHERE TBL_ContentsPage.mode = '1' AND TBLTempSettings.mode = '1' AND (TBLTempSettings.templateID = @templateID OR @templateID = 'all')
ORDER BY 0 + TBLTempSettings.rank DESC

しかしTBL_ContentsPage.PostedDate DESC、クエリを追加すると、2 倍以上の時間がかかります。TBLTempSettings.rankはすでにインデックスされています。

4

2 に答える 2

2

これを試してみてください -

SELECT TOP 50   c.newsId
            ,   c.author
            ,   c.Header
            ,   c.TextContent
            ,   c.PostedDate
            ,   c.status
            ,   t.templateID
FROM TBL_ContentsPage c
JOIN (
    SELECT *
    FROM TBLTempSettings t
    WHERE t.mode = '1'
        AND (t.templateID = @templateID OR @templateID = 'all')
) t ON c.newsId = CAST(t.newsId AS INT)
WHERE c.mode = '1'
ORDER BY t.rank DESC
于 2013-09-25T07:15:07.817 に答える
2

クエリ結果を並べ替えるために、SQL Server は CPU 時間を消費します。

ORDER BY 句は、すべてのクエリ結果をできるだけ早くアプリのメモリに取り込み、並べ替えます。

アプリケーションは、複数のアプリ サーバーをスケールアウトして CPU 負荷を分散できるように設計されていますが、データベース サーバーはそうではありません。

並べ替え操作は、TEMPDB システム データベースを一時記憶域として使用するだけでなく、操作の I/O 速度を大幅に向上させます。

したがって、Sort 演算子をクエリで頻繁に目にすることに慣れていて、この演算子の消費量が多い操作がある場合は、前述の句を削除することを検討してください。一方、クエリが常に特定の列で整理されることがわかっている場合は、インデックスを作成することを検討してください。

于 2013-09-25T07:15:15.020 に答える