Theo kinh nghiệm của tôi rằng, các truy vấn của bạn càng phức tạp, trình tối ưu hóa SQL càng ít có khả năng tạo các kế hoạch khéo léo. Ở đây bạn có 16 liên kết, một số hoặc hầu hết là liên kết ngoài, bạn có ít nhất một truy vấn con ... ném đủ chỉ mục, cấp số, chế độ xem, áp dụng bên ngoài và ai biết được điều gì khác và không ai, thậm chí không phải Microsoft kỹ sư *, có thể tìm ra các quy trình sẽ tạo ra các kế hoạch tối ưu nhất một cách thống nhất và thường xuyên.
Những gì bạn đã mô tả, tôi đã trải qua rất nhiều lần - hãy thay đổi một điều đơn giản trong một truy vấn lộn xộn và mọi thứ đều nhanh hơn (hoặc, nghiến răng, chậm hơn). Tôi không có phương pháp nào để xác định khi nào phức tạp quá phức tạp, đó là cảm giác hơn bất cứ thứ gì khác. Quy tắc chung của tôi là, nếu nó trông quá dài hoặc quá phức tạp, hãy đơn giản hóa nơi bạn có thể - chẳng hạn như giá trị lồng nhau đơn lẻ đã chọn trước của bạn hoặc chia nhỏ một phần của truy vấn hơn là luôn luôn chạy nhanh với một tập hợp kết quả nhỏ và chạy nó trước tiên và lưu trữ kết quả trong bảng tạm thời.
(* Xin lưu ý rằng đây là trò đùa nhẹ nhàng)