Làm cách nào tôi có thể ngăn SSMS viết lại mã của mình khi lưu chế độ xem?


8

Tôi đang tạo một khung nhìn sử dụng một câu lệnh có WHEREmệnh đề tương tự như sau:

WHERE
    (
        col1 IS NOT NULL
        OR
        col2 IS NOT NULL
    )
    AND
    NOT EXISTS (SELECT ...)

Mất trung bình 10 giây để chạy. Tuy nhiên, khi tôi cố lưu truy vấn này dưới dạng View, SQL Server (hoặc MS SQL Server Management Studio Client) "tối ưu hóa" truy vấn để sử dụng cấu trúc này, thay vào đó:

WHERE
    (col1 IS NOT NULL AND NOT EXISTS (SELECT ...))
    OR
    (col2 IS NOT NULL AND NOT EXISTS (SELECT ...))

Làm chậm truy vấn xuống hơn 6 phút. Có cách nào để vô hiệu hóa hành vi này, để chế độ xem sử dụng chính xác Truy vấn SQL tôi cung cấp không?

Câu trả lời:


14

Đừng sử dụng trình hướng dẫn SSMS.

chỉ cần gõ CREATE VIEW dbo.Foo AS SELECT ...câu lệnh của bạn vào một cửa sổ truy vấn mới và thực hiện nó.

Điều này sẽ ngăn nó sắp xếp lại cú pháp truy vấn tương đương về mặt ngữ nghĩa nhưng hoạt động kém hơn.


4
Và tất cả các khung nhìn, các procs được lưu trữ, UDF, bảng, v.v ... tất cả các đối tượng được tạo hoặc thay đổi đều phải có trong tập lệnh để chúng có thể được đưa vào kiểm soát nguồn như tất cả các mã khác.
HLGEM

1
Có một số công cụ SQL đồ họa ngoài kia rất tốt và sẽ không làm những thứ ngu ngốc như thế này
Earlz

2
@Earlz đúng, nhưng tôi nghĩ tất cả chúng ta đều biết chúng ta đang nói về SSMS một cách cụ thể, không phải tất cả các công cụ đồ họa nói chung.
Aaron Bertrand
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.