0

私は MSSQL を初めて使用し、インメモリ テーブルを使用したことがなく、これが必要かどうか 100% 確信が持てません。

クエリからの結果セット (修正不可) があり、データの各行をループして表示します。結果セットの 1 つのフィールドに対して、クエリを実行して、そのフィールドに関連する表示データを取得する必要があります。問題は、結果セットに含まれる行数によっては、ループ内でこのクエリを何千回も呼び出す必要がある可能性があることです。

これを効率的に行う方法について誰かアドバイスできますか? インメモリ テーブルについて聞いたことがありますが、これが必要かどうか疑問に思っていますか? もしそうなら、どこから始めればよいですか?それとも、単に配列などに保存しますか?

アドバイスをいただければ幸いです。

4

1 に答える 1

1
Declare @Test_Memory_Table Table
(
/* Fields needed for lookup; use same datatypes as schema */ 
IndexOrPkFieldName Numeric(19,0),
Field1 varchar(255),
Field2 date
)

Insert into @Test_Memory_Table Select t2.Field1 as field1, t1.field2 as Field2, CONVERT(char(10),t3.Field3, 101) as Field3 
                 From   Table1 t1 
                 INNER JOIN Table2 t2 on t1.pkId = t2.pkId and isnull(t2.IS_ACTIVE,0) = 1  and ISNULL(t2.TYPE, 0) > 0 
                 INNER JOIN Table3 t3 on t2.pkId = t3.pkId

select * from @Test_Memory_Table

SSMS でクエリをテストし、計画を見て、メモリ テーブル クエリを返すのにかかる時間と、テーブルを直接クエリするのにかかる時間を確認してください。ヒントは ssms でデフォルト設定されているため (arithabort など)、ssms は本番環境よりも高速である可能性がありますが、.net クライアントを介してクエリを実行する場合は、そのように設定されない可能性があることに注意してください。テーブルが小さい場合、違いはわずかであると予想されます。

于 2012-08-30T05:38:19.107 に答える