Có thể truy xuất cùng một dữ liệu như sau với một lần tìm kiếm hoặc quét, bằng cách sửa đổi truy vấn hoặc ảnh hưởng đến chiến lược của trình tối ưu hóa không?
Mã và lược đồ tương tự như hiện đang có trên SQL Server 2014.
Kịch bản repro. Thiết lập:
USE tempdb;
GO
IF OBJECT_ID('dbo.TestUpload', 'U') IS NOT NULL
DROP TABLE dbo.TestUpload;
CREATE TABLE dbo.TestUpload(
JobRunId bigint NOT NULL,
ThingAName nvarchar(255) NOT NULL,
ThingAType nvarchar(255) NOT NULL,
ThingAGranularity nvarchar(255) NOT NULL,
ThingBName nvarchar(255) NOT NULL,
ThingBType nvarchar(255) NOT NULL,
ThingBGranularity nvarchar(255) NOT NULL
);
CREATE CLUSTERED INDEX IX_JobRunId ON dbo.TestUpload (JobRunId);
GO
INSERT INTO dbo.TestUpload (JobRunId, ThingAName, ThingAType, ThingAGranularity, ThingBName, ThingBType, ThingBGranularity)
VALUES (1, 'A', 'B', 'C', 'D', 'E', 'F');
GO 10
INSERT INTO dbo.TestUpload (JobRunId, ThingAName, ThingAType, ThingAGranularity, ThingBName, ThingBType, ThingBGranularity)
VALUES (1, 'D', 'E', 'F', 'A', 'B', 'C');
GO 10
Truy vấn:
DECLARE @JobRunID bigint = 1;
SELECT JobRunId,
ThingAName AS Name,
ThingAType AS [Type],
ThingAGranularity AS Granularity
FROM dbo.TestUpload
WHERE JobRunId = @JobRunID
UNION
SELECT JobRunId,
ThingBName AS Name,
ThingBType AS [Type],
ThingBGranularity AS Granularity
FROM dbo.TestUpload
WHERE JobRunId = @JobRunID;
Phá bỏ:
IF OBJECT_ID('dbo.TestUpload', 'U') IS NOT NULL
DROP TABLE dbo.TestUpload;
Tôi nghĩ rằng điều này có thể không được mô hình hóa lý tưởng. Tôi đang cố gắng để có thêm thông tin từ nhà phát triển về cách chọn lược đồ nhưng tôi tò mò liệu có một thủ thuật TSQL nào tôi đang xem vì sẽ dễ dàng thay đổi truy vấn hơn lược đồ.
UNION
những bản sao phải được loại bỏ.