คำถามติดแท็ก hints

3
OPTION FAST ในคำสั่ง SELECT ทำอะไร?
ฉันได้ทำการขุดในสิ่งที่OPTION (FAST XXX)คำใบ้ในแบบสอบถามSELECTและฉันยังสับสนอยู่ อ้างอิงจาก MSDN: ระบุว่าเคียวรีถูกปรับให้เหมาะสมสำหรับการดึง number_rows แรกอย่างรวดเร็ว นี่เป็นจำนวนเต็มที่ไม่ใช่ค่าลบ หลังจากที่ number_rows แรกถูกส่งคืนเคียวรีจะยังคงประมวลผลและสร้างชุดผลลัพธ์แบบเต็ม สำหรับฉันที่ไม่สมเหตุสมผล แต่โดยทั่วไปแล้วการสืบค้นจะได้แถว XXX แรกเร็วมากจากนั้นส่วนที่เหลือที่ความเร็วปกติคืออะไร แบบสอบถาม Microsoft Dynamics ที่ทำให้ฉันคิดในเรื่องนี้คือ: select pjproj.project,pjproj.project_desc,pjproj.customer,pjproj.cpnyid from pjproj WITH (NOLOCK) where project like '%' order by project OPTION(FAST 500) ทุกคนสามารถอธิบายได้อย่างชัดเจนว่าคำใบ้ของแบบสอบถามนี้กำลังทำอะไรและมีข้อได้เปรียบเหนือการไม่ใช้

3
คำแนะนำ NOLOCK เปลี่ยนลำดับของบันทึกที่ส่งคืน
มีดัชนีคลัสเตอร์บนโต๊ะเป็นฟิลด์ClientLastName เมื่อฉันเพียงแค่ถ่ายโอนข้อมูลทั้งหมดจากตารางข้อมูลเหล่านั้นจะปรากฏตามลำดับตัวอักษรเว้นแต่(nolock)จะมีการใช้คำใบ้ในแบบสอบถามที่เป็นปัญหา คำใบ้นั้นเปลี่ยนลำดับของบันทึก ควรเป็น?. ฉันมั่นใจว่าไม่มีเซสชันอื่นที่มีธุรกรรมเปิดที่มีการเปลี่ยนแปลงในตารางนั้น (อย่างน้อยsp_who2ก็ไม่แสดงให้ฉันเห็น) ความแตกต่างในการสั่งซื้อสามารถอธิบายได้อย่างไร ดึงข้อมูลเพิ่มเติมจากความคิดเห็น: ไม่มีคำสั่งซื้อโดย ดัชนีที่ไม่ใช่คลัสเตอร์ควรบังคับใช้คำสั่งหรือไม่ คิวรียังคงส่งคืนคำสั่งซื้อที่แตกต่างกันแม้ว่าจะใช้คำใบ้ดัชนีที่ระบุดัชนีคลัสเตอร์ พวกเขาควร? ฉันสงสัยว่าทำไมnolockการเปลี่ยนแปลงลำดับของระเบียนที่ส่งคืนโดยไม่มีการเปลี่ยนแปลงแผน ฉันทำ WinDiff กับพวกเขา - เหมือนกันยกเว้น [the] (nolock)[คำใบ้แบบสอบถาม]

1
ทำไมคำใบ้ READPAST ทำให้มุมมองที่จัดทำดัชนีถูกละเว้น?
ฉันกำลังตรวจสอบโดยใช้READPASTคำแนะนำเพื่อลดการล็อกทรัพยากรในระบบย่อยทางการเงินของแอปพลิเคชันของเรา ดูเหมือนจะเป็นวิธีที่ดีในการไปเพราะบันทึกการทำธุรกรรมทางการเงินนั้นเคยเพิ่มไม่เคยอัพเดทหรือลบ แถวเดียวที่จะถูกข้ามไปคือแถวใหม่ที่แทรกอยู่ภายในธุรกรรม พวกเขาไม่มีอยู่จริงกับโลกภายนอกจนกว่าจะมีการทำธุรกรรม อย่างไรก็ตามฉันสังเกตเห็นประสิทธิภาพการทำงานแย่ลงสำหรับการค้นหาที่ใช้มุมมองที่จัดทำดัชนีซึ่งฉันได้ใส่READPASTคำใบ้ไว้ เปรียบเทียบแผนแบบสอบถามมันดูเหมือนกับคำใบ้เครื่องมือเพิ่มประสิทธิภาพแบบสอบถามเลือกที่จะไม่ใช้มุมมองที่จัดทำดัชนีและแทนที่จะกลับไปที่การรักษามันเหมือนมุมมองปกติ ฉันไม่แน่ใจว่าทำไมถึงเป็นเช่นนั้น ฉันคิดว่ามุมมองที่จัดทำดัชนีจะเหมือนกับดัชนีอื่น ๆ ในคีย์นั้นสามารถล็อกระหว่างการดำเนินการและการเพิ่มREADPASTจะทำงานในทำนองเดียวกัน SELECT TOP 1 isa.InvoiceId FROM Financial_InvoiceSummaryAmounts isa WITH (READPAST) WHERE isa.TotalOwedAmount = 0.0 SELECT TOP 1 isa.InvoiceId FROM Financial_InvoiceSummaryAmounts isa WHERE isa.TotalOwedAmount = 0.0 การเพิ่มNOEXPANDคำใบ้ดูเหมือนจะใช้งานได้ แต่ฉันสนใจที่จะเรียนรู้เพิ่มเติมเกี่ยวกับสาเหตุที่READPASTทำให้เครื่องมือเพิ่มประสิทธิภาพคิวรีสร้างตัวเลือกนั้นตั้งแต่แรก (เป็นส่วนหนึ่งของคำตอบแบบเต็ม)

1
OPTION FORCE ORDER ปรับปรุงประสิทธิภาพจนกว่าแถวจะถูกลบ
ฉันมีแบบสอบถาม SQL Server 2008 ที่ค่อนข้างซับซ้อน (ประมาณ 200 บรรทัดของ SQL ที่มีความหนาแน่นพอสมควร) ซึ่งไม่ทำงานตามที่ฉันต้องการ เมื่อเวลาผ่านไปประสิทธิภาพจะลดลงจากประมาณ 0.5 วินาทีเป็นประมาณ 2 วินาที ดูที่แผนการดำเนินการมันค่อนข้างชัดเจนว่าการเรียงลำดับตัวเชื่อมใหม่จะทำให้ประสิทธิภาพดีขึ้น ฉันทำและมันลงไปถึงประมาณ 3 วินาที ตอนนี้แบบสอบถามมีคำแนะนำ "คำสั่งตัวเลือกการบังคับ"และชีวิตเป็นสิ่งที่ดี ตามมาด้วยฉันวันนี้ล้างฐานข้อมูล ฉันเก็บประมาณ 20% ของแถวที่จะดำเนินการในฐานข้อมูลที่เกี่ยวข้องอื่นใดนอกจากการลบแถว ... แผนปฏิบัติการที่ได้รับการทยอย มันผิดทั้งหมดจำนวนแถวย่อยบางอย่างจะกลับมาและ (ตัวอย่าง) แทนที่ a: <Hash> กับ <NestedLoops Optimized='false' WithUnorderedPrefetch='true'> ในขณะนี้เวลาของแบบสอบถามเริ่มจากประมาณ. 3 ถึงประมาณ 18 วินาที (!) เพียงเพราะฉันลบแถว หากฉันลบคำใบ้คำค้นหาฉันกลับไปใช้เวลาสอบถามข้อมูลประมาณ 2 วินาที ดีกว่า แต่แย่กว่านั้น ฉันได้ทำซ้ำปัญหาหลังจากกู้คืนฐานข้อมูลไปยังสถานที่และเซิร์ฟเวอร์หลายแห่ง …
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.