我试图了解 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 次逻辑读取有什么用?