SQLサーバーがデータにアクセスする方法を理解しようとしています。
非常に単純なクエリの場合、必要な論理読み取りの数を正確に計算できますが、かなり単純なクエリに従うことに問題があります。
SELECT a.*
FROM TT_TMP_3 AS a
INNER JOIN TT_TMP_4 AS b
ON b.id = a.id
これはテーブルを生成するコードです:
CREATE TABLE TT_TMP_3(
id int,
x int)
DECLARE @i int
SET @i = 0
WHILE @i <= 100000
BEGIN
INSERT INTO TT_TMP_3
VALUES(@i, 1)
SET @i = @i + 1
END
SELECT *
INTO TT_TMP_4
FROM TT_TMP_3
WHERE id <= 770
CREATE INDEX IDX ON TT_TMP_3(ID)
クエリ統計は次のとおりです:
(影響を受ける 771 行) テーブル 'TT_TMP_3'。スキャン カウント 771、論理読み取り 2429、物理読み取り 0、先読み読み取り 6、LOB 論理読み取り 0、LOB 物理読み取り 0、LOB 先読み読み取り 0。
テーブル 'TT_TMP_4'。スキャン カウント 1、論理読み取り 3、物理読み取り 0、先読み読み取り 0、LOB 論理読み取り 0、LOB 物理読み取り 0、LOB 先読み読み取り 0。
TT_TMP_4 には 771 行あるため、771 回のインデックス シークが必要です。各シークには 2 つの論理読み取りが必要です。次に、見つかった行ごとに、列 x の値を見つけるために RID_lookup を実行する必要があります。これにより、さらに 771 回の論理読み取りが可能になります。合計で 2313 の読み取りがあり、まだ 116 が欠落しています。
質問:これらの 116 の論理読み取りは何のためですか?