我有一个查询,在这个查询中,我需要将一个5行的小表连接到一个大约31k行的表。执行计划SQL Server在两个表中提出了in索引扫描,并将它们与嵌套循环(内部联接)连接起来。但是,在检查执行计划时,我注意到对较小的表的扫描为下面的步骤生成了5x31k=155 k行。这是否意味着Server正在扫描较小的表31k的索引?
下面是我遇到的问题的一个小复制品:
CREATE TABLE A (id INT PRIMARY KEY);
CREATE TABLE B (id INT PRIMARY KEY);
INSERT INTO A(id)
VALUES (1), (2), (3), (4), (5);
INSERT INTO B(id)
VALUES (1), (2), (3), (4), (5), (6), (7), (8), (9)
SELECT * FROM A CROSS JOIN B
下面是SELECT
命令的查询实时统计信息
我的问题是,小表上的索引扫描是否正在执行多个I/O操作,大表上的每一行都有一个I/O操作,而不是只执行一次,并且只将其结果输入下一步。
发布于 2019-02-06 19:18:54
我的问题是,小表上的索引扫描是否正在执行多个I/O操作,大表上的每一行都有一个I/O操作,而不是只执行一次,并且只将其结果输入下一步。
是的,对于A中的每一行,您都需要为B生成所有行,因为A中有五行,所以您需要对B进行五次旅行。
交叉连接只能用嵌套的循环实现,这是它的正常行为。
https://dba.stackexchange.com/questions/229070
复制相似问题