3

我试图了解 sql server 如何访问数据。
对于非常简单的查询,我能够准确计算所需的逻辑读取数,但我对以下相当简单的查询有疑问:

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 次逻辑读取。然后对于已找到的每一行,需要执行 RID_lookup 以查找列 x 的值。这给了我们另外 771 个逻辑读取。总共有 2313 个读取,仍有 116 个缺失。

问题:这 116 次逻辑读取有什么用?

4

0 回答 0