我正在尝试了解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个逻辑读取是什么?