คอลัมน์ที่รวมกับดัชนีที่กรอง


11

ขณะนี้เราทำงานกับตารางชื่อtb_tranfers ตารางนี้มี 40 ล้านแถวและมีขนาด ~ 26 GB (ข้อมูล 11 GB, ดัชนี 15 GB)

10 ถึง 15% ของแถวเป็นแถวที่ถูกลบแบบอ่อน ( DeletedDateไม่ใช่ค่าว่าง) แอปพลิเคชันใช้เฉพาะแถวที่DeletedDateเป็นโมฆะ แบบสอบถามทั้งหมดในตารางนี้จะมีส่วนคำสั่งที่มีผล

มี 15 ดัชนีในตารางนี้ ดัชนี DMV ที่ขาดหายไปมีคำแนะนำในการสร้างดัชนีด้วยDeletedDateเป็นคอลัมน์ที่รวมอยู่

จะเป็นประโยชน์หรือไม่ที่จะใช้ดัชนีที่กรองแล้วในดัชนีWHERE DeleteDdate IS NULLที่ไม่ได้กล่าวถึงทั้ง 11 ดัชนี หรือมันจะดีกว่าที่จะมีคอลัมน์DeletedDateเป็นคอลัมน์ที่รวมหรือไม่

คำตอบ:


12

ใช่การแก้ไขดัชนี NC ทั้ง 11 ตัวเพื่อกรองดัชนี ( CREATE INDEX ... ON ... WHERE DeletedDate IS NULL) จะช่วยได้ วิธีนี้คุณจะได้รับสองข้อได้เปรียบ:

  • แบบสอบถามเพิ่มประสิทธิภาพจะรู้ว่าแถวใด ๆ มาจากดัชนีเหล่านี้แล้วไม่ตอบสนองฟิลเตอร์แบบสอบถามของคุณบน DeletedDate ดังนั้นจึงจะไม่ต้องค้นหาดัชนีคลัสเตอร์เพื่อตรวจสอบอีกครั้ง DeletedDate
  • ดัชนี NC ทั้งหมดจะมีขนาดเล็กลง 10-15% ซึ่งต้องใช้หน่วยความจำน้อยลงและใช้การค้นหา IO น้อยลง

การแลกเปลี่ยนคือแบบสอบถามใด ๆที่ดูแลแถวที่ถูกลบแบบอ่อน (และจะต้องมีแบบสอบถามบางอย่างมิฉะนั้นทำไมแถวนั้นมีอยู่) จะไม่สามารถใช้ดัชนี NC เหล่านี้ได้


7

หากคุณใช้ตัวกรองเสมอDeletedDate IS NULLในการสืบค้นของคุณใช่แล้วคุณจะเห็นการเพิ่มขึ้นอย่างมีนัยสำคัญโดยการเพิ่มตัวกรอง

มีหน้าน้อยมากที่เอ็นจิ้นจะตรวจสอบเพื่อค้นหาแถวที่เกี่ยวข้องซึ่งหมายถึง IO น้อยกว่า (และความเร็วมากขึ้น)

เพิ่มเป็นINCLUDEDฟิลด์จะไร้ประโยชน์ ตั้งแต่คุณมักจะรวมไว้ในตัวกรอง ( แต่อาจจะไม่เพิ่มไปยังรายการที่เลือก) INCLUDEข้อมูลที่จะไม่ได้รับการอ้างอิงถ้าคุณเพิ่มว่ามันเป็น


2

เนื่องจาก 85-90% ของแถวมี DeletedDate เป็น NULL จึงไม่น่าเป็นไปได้ที่การเลือกของดัชนีที่ประกอบด้วย DeletedDate เท่านั้นจะเพียงพอสำหรับ SQL ที่จะใช้ดัชนีนี้ อย่างไรก็ตามใช้ร่วมกับคอลัมน์เลือกเพิ่มเติมอื่น ๆ ผนวก DeletedDate กับดัชนีที่มีอยู่ควรให้ประโยชน์บางอย่างถ้ามันเพิ่มการเลือกโดยรวมของดัชนี

ในฐานะที่เป็น JNK พูดว่า DeletedDate จะมีการใช้งานเล็กน้อยในการครอบคลุมดัชนีเว้นแต่ว่าคุณจะใช้มันในส่วนคำสั่ง SELECT

เนื่องจากมีที่เก็บข้อมูลสำหรับดัชนีมากกว่าสำหรับข้อมูลอยู่แล้วคุณอาจต้องการดูว่ามีความซ้ำซ้อนในดัชนี 15 NC ที่มีอยู่หรือไม่

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.