Có ai biết tại sao máy chủ sql chọn để truy vấn bảng 'Tòa nhà' hai lần? Có lời giải thích nào không? Nó có thể được thực hiện chỉ với một bàn tìm kiếm?SQL Server - tại sao quét được thực hiện hai lần cho cùng một bảng?
Đây là mẫu mã:
DECLARE @id1stBuild INT = 1
,@number1stBuild INT = 2
,@idLastBuild INT = 5
,@numberLastBuild INT = 1;
DECLARE @nr TABLE (nr INT);
INSERT @nr
VALUES (1),(2),(3),(4),(5),(6),(7),(8),(9),(10);
CREATE TABLE building (
id INT PRIMARY KEY identity(1, 1)
,number INT NOT NULL
,idStreet INT NOT NULL
,surface INT NOT NULL
)
INSERT INTO building (number,idStreet,surface)
SELECT bl.b
,n.nr
,abs(convert(BIGINT, convert(VARBINARY, NEWID()))) % 500
FROM (
SELECT ROW_NUMBER() OVER (ORDER BY n1.nr) b
FROM @nr n1
CROSS JOIN @nr n2
CROSS JOIN @nr n3
) bl
CROSS JOIN @nr n
--***** execution plan for the select below
SELECT *
FROM building b
WHERE b.id = @id1stBuild
AND b.number = @number1stBuild
OR b.id = @idLastBuild
AND b.number = @numberLastBuild
DROP TABLE building
Các kế hoạch thực hiện cho điều này luôn luôn là như nhau: Hai Clustered Index tìm kiếm thống nhất thông qua Merge Join (Concatenation). Phần còn lại ít quan trọng hơn. Dưới đây là kế hoạch thực hiện:
Điều khoản where của bạn bị thiếu khung. Tôi nghĩ rằng có thể là nguyên nhân của việc này ... '([email protected] VÀ [email protected]) OR ([email protected] VÀ [email protected])' vì của 'OR' –
Cảm ơn bạn đã trả lời nhanh. Tôi đã thử nó và nó vẫn là kế hoạch thực hiện tương tự. – Emarian