สำหรับข้อความค้นหาที่ซับซ้อนปานกลางที่ฉันพยายามปรับให้เหมาะสมฉันสังเกตว่าการลบTOP n
คำสั่งเปลี่ยนแผนการดำเนินการ ฉันจะเดาว่าเมื่อเคียวรีมีเอ็นจินTOP n
ฐานข้อมูลจะรันเคียวรีโดยไม่สนใจTOP
คำสั่งและจากนั้นในตอนท้ายก็ลดขนาดของผลลัพธ์ที่กำหนดไว้เป็นจำนวนแถวnที่ถูกร้องขอ แผนการดำเนินการกราฟิกดูเหมือนว่าจะระบุว่าเป็นกรณีนี้ - TOP
เป็นขั้นตอน "สุดท้าย" แต่ดูเหมือนว่าจะเกิดขึ้นมากขึ้น
คำถามของฉันคือประโยค TOP และ N มีผลอย่างไรต่อแผนการดำเนินการของแบบสอบถาม
นี่เป็นเวอร์ชั่นที่เรียบง่ายของสิ่งที่เกิดขึ้นในกรณีของฉัน:
แบบสอบถามกำลังจับคู่แถวจากสองตาราง A และ B
โดยไม่ต้องTOP
เป็นไปตามข้อเพิ่มประสิทธิภาพประเมินจะมี 19k แถวจากตารางและ 46K แถวจากตาราง B. จำนวนที่เกิดขึ้นจริงของแถวกลับเป็น 16k สำหรับ A และ 13k สำหรับการแข่งขันบีกัญชาจะใช้ในการเข้าร่วมทั้งสองชุดผลลัพธ์ รวม 69 แถว (จากนั้นจะใช้การเรียงลำดับ) แบบสอบถามนี้เกิดขึ้นอย่างรวดเร็วมาก
เมื่อฉันเพิ่มTOP 1001
เครื่องมือเพิ่มประสิทธิภาพไม่ได้ใช้แฮชจับคู่; แต่ก่อนจะเรียงลำดับผลลัพธ์จากตาราง A (ประมาณเดียวกัน / เป็นจริงของ 19k / 16k) และทำการวนซ้ำซ้อนกับตาราง B จำนวนแถวของตาราง B ที่ประมาณในขณะนี้คือ 1 และสิ่งที่แปลกก็คือสิ่งที่TOP n
ส่งผลโดยตรงต่อ ประเมินจำนวนการประหารชีวิต (ดัชนีแสวงหา) กับ B - มันดูเหมือนจะเป็นเสมอ2n + 1หรือในกรณีของฉัน 2003 TOP n
ประมาณนี้มีการเปลี่ยนแปลงตามความเหมาะสมหากฉันเปลี่ยน แน่นอนเนื่องจากนี่คือการรวมที่ซ้อนกันจำนวนจริงของการประมวลผลคือ 16k (จำนวนแถวจากตาราง A) และสิ่งนี้ทำให้การสืบค้นช้าลง
สถานการณ์ที่เกิดขึ้นจริงนั้นซับซ้อนกว่านี้เล็กน้อย แต่สิ่งนี้จะรวบรวมความคิด / พฤติกรรมพื้นฐาน ตารางทั้งสองถูกค้นหาโดยใช้ดัชนีค้นหา นี่คือ SQL Server 2008 R2 Enterprise edition
FAST num_rows
คำใบ้คำถาม
ORDER BY
ข้อ การเพิ่มTOP
การเปลี่ยนแปลงที่ในแผนแบบนี้เกิดขึ้น แต่ฉันกังวลมากขึ้นว่ามันมีผลต่อจำนวนการดำเนินการของดัชนีที่ค้นหาเทียบกับตาราง B ... (แน่นอนว่าทั้งสองอาจเกี่ยวข้องกัน - ฉันไม่รู้)