ฉันพบสถานการณ์แปลก ๆ ที่ผนวกOPTION (RECOMPILE)
กับแบบสอบถามของฉันทำให้การทำงานในครึ่งวินาทีในขณะที่ละเว้นมันทำให้แบบสอบถามใช้เวลานานกว่าห้านาที
นี่คือกรณีที่เมื่อแบบสอบถามจะถูกดำเนินการจากการวิเคราะห์คำถามหรือจากโปรแกรมของฉัน C # SqlCommand.ExecuteReader()
ผ่าน โทร (หรือไม่โทร) DBCC FREEPROCCACHE
หรือDBCC dropcleanbuffers
สร้างความแตกต่าง; ผลลัพธ์การสืบค้นจะส่งคืนทันทีด้วยOPTION (RECOMPILE)
และมากกว่าห้านาทีโดยไม่มี แบบสอบถามจะถูกเรียกด้วยพารามิเตอร์เดียวกันเสมอ [เพื่อประโยชน์ในการทดสอบนี้]
ฉันใช้ SQL Server 2008
ฉันค่อนข้างสบายใจกับการเขียน SQL แต่ไม่เคยใช้OPTION
คำสั่งในแบบสอบถามมาก่อนและไม่คุ้นเคยกับแนวคิดทั้งหมดของแผนแคชจนกว่าจะสแกนโพสต์ในฟอรัมนี้ ความเข้าใจของฉันจากโพสต์OPTION (RECOMPILE)
คือการดำเนินการที่มีราคาแพง ดูเหมือนจะสร้างกลยุทธ์การค้นหาใหม่สำหรับแบบสอบถาม แล้วเหตุใดจึงเป็นเช่นนั้นแบบสอบถามที่ตามมาที่ละเว้นOPTION (RECOMPILE)
จึงช้ามาก? แบบสอบถามที่ตามมาไม่ควรใช้กลยุทธ์การค้นหาที่คำนวณจากการโทรก่อนหน้าซึ่งรวมถึงคำแนะนำการคอมไพล์ใหม่หรือไม่
มันผิดปกติหรือไม่ที่มีคิวรีที่ต้องการคำแนะนำการคอมไพล์ซ้ำในการโทรทุกครั้ง?
ขออภัยสำหรับคำถามระดับเริ่มต้น แต่ฉันไม่สามารถสร้างหัวหรือก้อยของเรื่องนี้ได้
อัปเดต: ฉันถูกขอให้โพสต์ข้อความค้นหา ...
select acctNo,min(date) earliestDate
from(
select acctNo,tradeDate as date
from datafeed_trans
where feedid=@feedID and feedDate=@feedDate
union
select acctNo,feedDate as date
from datafeed_money
where feedid=@feedID and feedDate=@feedDate
union
select acctNo,feedDate as date
from datafeed_jnl
where feedid=@feedID and feedDate=@feedDate
)t1
group by t1.acctNo
OPTION(RECOMPILE)
เมื่อรันการทดสอบจาก Query Analyzer ฉันจะเติมบรรทัดต่อไปนี้:
declare @feedID int
select @feedID=20
declare @feedDate datetime
select @feedDate='1/2/2009'
เมื่อเรียกมันจากโปรแกรม C # ของฉันพารามิเตอร์จะถูกส่งผ่านทางSqlCommand.Parameters
คุณสมบัติ
สำหรับวัตถุประสงค์ของการสนทนานี้คุณสามารถสันนิษฐานได้ว่าพารามิเตอร์ไม่เคยเปลี่ยนแปลงดังนั้นเราจึงสามารถแยกแยะพารามิเตอร์ที่เหมาะสมที่สุดในการดมกลิ่นเป็นสาเหตุ
X = @X OR @X IS NULL
ไปX=@X
และดำเนินการขอความเห็นที่นี่หรือผลักดันภาคลงต่อกับมุมมองที่มีฟังก์ชั่นหน้าต่าง
RECOMPILE
ค่าของคนเหล่านั้นไม่เคยดมยกเว้น ในทุกเหตุการณ์จับแผนการดำเนินการและดูความแตกต่าง