User-Defined Table Typesを使用して、整数リストをストアドプロシージャに渡しました。SQL Serverのユーザー定義テーブル型のパフォーマンス
これらを使用して、ストアドプロシージャクエリの他のテーブルに結合します。
たとえば:大きなデータセットを使用している場合
CREATE PROCEDURE [dbo].[sp_Name]
(
@Ids [dbo].[OurTableType] READONLY
)
AS
SET Nocount ON
SELECT
*
FROM
SOMETABLE
INNER JOIN @Ids [OurTableType] ON [OurTableType].Id = SOMETABLE.Id
私たちは、このことから非常に悪いパフォーマンスを見てきました。
私たちは物事をスピードアップするために使用したアプローチの1つとして、内容を一時テーブルにダンプし、その代わりに参加します。例えば
は:
CREATE PROCEDURE [dbo].[sp_Name]
(
@Ids [dbo].[OurTableType] READONLY
)
AS
SET Nocount ON
CREATE TABLE #TempTable(Id INT)
INSERT INTO #TempTable
SELECT Id from @Ids
SELECT
*
FROM
SOMETABLE
INNER JOIN #TempTable ON #TempTable.Id = SOMETABLE.Id
DROP TABLE #TempTable
これは、パフォーマンスを大幅に向上させるんが、私は、このアプローチにいくつかの意見と私たちは考えられていない任意の他の結果を取得したいです。また、これがパフォーマンスを向上させる理由についての説明も役立つかもしれません。
N.B.時には、整数以上のものを渡す必要があるかもしれません。そのため、コンマ区切りのリストなどを使用しないのはなぜですか。
質問:このリストは、アプリケーション層、または別のsprocから渡していますか?一時テーブルとテーブル変数について書かれた記事がたくさんあります。 http:// stackoverflow。com/questions/27894/whats-the-difference-temp-table-and-table-variable-in-sql-serverとhttp://www.sql-server-performance.com/2007/temp- tables-vs-variables/ – Jeremy
はい、アプリケーション層からリストを渡しています。記事をありがとう。 – KMB