ฉันมีแบบสอบถามในตารางขนาดใหญ่ที่มีลักษณะเช่นนี้:
declare @myIdParam int = 1
select *
from myTable
where (@myIdParam is null or myTable.Id = @myIdParam)
มีเงื่อนไขที่คล้ายกันหลายประการเช่นนี้ในส่วนคำสั่งและยังมีการรวมจำนวนมาก แต่นี่เป็นบทสรุป
อย่างมีประสิทธิภาพหาก @myIdParam เป็นโมฆะเราไม่ต้องการ จำกัด ผลลัพธ์โดยใช้พารามิเตอร์นี้
ฉันไม่ใช่มืออาชีพ DB แต่จากการทดสอบของฉันดูเหมือนว่าการตรวจสอบ NULL นี้ทำสำหรับทุกเร็กคอร์ดและไม่ได้ปรับให้เหมาะสม แต่อย่างใด
ถ้าฉันลบการตรวจสอบโมฆะและสมมติว่าพารามิเตอร์นั้นไม่เป็นโมฆะแบบสอบถามจะส่งคืนทันที มิฉะนั้นจะใช้เวลาสูงสุดสิบวินาที
มีวิธีการเพิ่มประสิทธิภาพนี้เพื่อตรวจสอบจะทำเพียงครั้งเดียวที่รันไทม์?
OPTION(RECOMPILE)