ตกลงหรือไม่ที่จะเพิ่มดัชนีหายไป?


21

ฉันมักจะใช้ SSMS เพื่อทดสอบขั้นตอนการจัดเก็บช้าของฉันสำหรับดัชนีที่ขาดหายไป เมื่อใดก็ตามที่ฉันเห็น "ดัชนีที่หายไป (ผลกระทบ xxx)" ปฏิกิริยาเข่าของฉันคือการสร้างดัชนีใหม่ ผลลัพธ์นี้ทำให้การสืบค้นเร็วขึ้นทุกครั้งที่ฉันสามารถบอกได้

มีเหตุผลอะไรที่ฉันไม่ควรทำต่อไป?


1
คุณช่วยบอกฉันได้ไหมว่าฉันจะรับคุณลักษณะของดัชนีที่หายไปจากที่ไหน
Ali Raza Iftikhar

คำตอบ:


27

หลายเหตุผล.

หนึ่งในสิ่งที่ใหญ่ที่สุดที่ฉันนึกได้ก็คือดัชนี DMV ที่ขาดหายไปนั้นไม่ได้คำนึงถึงดัชนีที่มีอยู่

ตัวอย่าง:

ColA, ColB, ColCคุณมีตารางที่มี

ColAขณะนี้คุณมีดัชนีใน ดัชนีหายไป DMV (ColA, ColB)จะแนะนำให้คุณเพิ่มดัชนีบน นี้อาจจะถูกต้อง แต่สมาร์ทสิ่งที่จะต้องทำคือการเพิ่มColBเป็นกุญแจดอกที่สองในดัชนีที่มีอยู่ มิฉะนั้นคุณจะมีความครอบคลุมที่ซ้ำกันและเปลืองพื้นที่และค่าใช้จ่าย

ในทำนองเดียวกันถ้าคุณมีดัชนีในก็อาจแนะนำดัชนีในColB INCLUDE (ColA) ColB INCLUDE (ColC)สิ่งที่ต้องทำอีกอย่างคือการเพิ่มColCไปยังรายการรวมในดัชนีที่มีอยู่

ดัชนีที่แนะนำมีมุมมองที่แคบมาก - พวกเขาดูเพียงแบบสอบถามเดียวหรือการดำเนินการเดียวภายในแบบสอบถามเดียว พวกเขาไม่คำนึงถึงสิ่งที่มีอยู่แล้วหรือรูปแบบแบบสอบถามอื่น ๆ ของคุณ

คุณยังต้องใช้ความคิดของมนุษย์ในการวิเคราะห์กลยุทธ์การจัดทำดัชนีโดยรวมและตรวจสอบให้แน่ใจว่าโครงสร้างดัชนีของคุณมีประสิทธิภาพและเหนียวแน่น

หากไม่มีปัญหาเพียงแค่เพิ่มดัชนีที่แนะนำทั้งหมดก็ไม่จำเป็นต้องมีการแนะนำดัชนี - พวกเขาจะดำเนินการโดยอัตโนมัติ


ฉันเห็นบางทีนั่นอาจเป็นเหตุผลที่ทำให้ฉันรู้สึกว่าฉันมีดัชนีพันล้าน ฉันเดาว่าฉันควรพยายามเข้าใจแผนการอธิบายเหล่านี้ให้ดีขึ้นและหาดัชนีด้วยตนเอง
OO

หากคุณ google duplicate index scriptsหรือสิ่งที่คล้ายกันมีทรัพยากรจำนวนมากสำหรับการติดตามสิ่งเหล่านี้ลง ฉันจัดการดัชนีส่วนใหญ่ของตัวเองและรู้ดีเล็กน้อยเกี่ยวกับเรื่องนี้ แต่ฉันยังคงค้นหาสิ่งที่หลงกลเป็นครั้งคราว
JNK

"คุณยังต้องใช้ความคิดของมนุษย์ในการวิเคราะห์กลยุทธ์การจัดทำดัชนีโดยรวมและตรวจสอบให้แน่ใจว่าโครงสร้างดัชนีของคุณมีประสิทธิภาพและเหนียวแน่น" +1! ในฐานะที่ปรึกษาฉันมีลูกค้าทุกประเภทในทุกสถานการณ์ บางครั้งฉันได้ลูกค้าเหล่านั้นเพราะพวกเขามีดัชนีมากเกินไป (และคนผิด, คนที่ซ้ำซ้อน, ฯลฯ ) มากเกินไป - ทั้งหมดแนะนำโดยที่ปรึกษาการปรับแต่งโปรแกรมฐานข้อมูล
Mike Walsh

@JNK - ฉันจะทำอย่างนั้น
OO

2
จุดที่ดี - ดัชนีที่ทับซ้อนกันเป็นสิ่งที่ใหญ่ที่สุดที่ต้องระวังที่นี่ และแน่นอนว่ายิ่งคุณมีดัชนีมากขึ้นเท่าไหร่การแทรกที่ช้าก็จะกลายเป็นบวกกับความนิยมในการบำรุงรักษา (เพิ่มความซับซ้อน) และอื่น ๆ อีกมากมาย
Jeff Atwood

8

ฉันขอแนะนำให้ใช้ความระมัดระวังของเทคนิคการปรับแต่งนี้เนื่องจากฉันพบว่าคำแนะนำดัชนีที่ขาดหายไปซึ่งผุดขึ้นมาจากแผนแบบสอบถามเพื่อให้มีความน่าเชื่อถือน้อยลงอย่างต่อเนื่องเนื่องจากข้อความค้นหาและ schema DB มีความซับซ้อนมากขึ้น นี่เป็นเพราะเหตุผลหลายประการในประสบการณ์ของฉัน:

1) "การปรับปรุงเปอร์เซ็นต์" สามารถหลีกเลี่ยงได้สำหรับทุกคนยกเว้นแบบสอบถามที่ง่ายที่สุด / ดัชนีที่ชัดเจนที่สุดหลังจากทั้งหมดเป็นเพียงการประมาณการและไม่ได้มาจากต้นทุนจริงที่เกิดขึ้นหรือจำนวนแถวจริงเมื่อมีการเรียกใช้แบบสอบถาม ฉันเห็นค่าใช้จ่ายในการค้นหาเพิ่มขึ้นหลังจากใช้ดัชนีที่แนะนำหรือไม่ได้ใช้และแผนยังคงเหมือนเดิม

2) แผนคิวรีเองไม่เหมาะสมเนื่องจากการสร้างคิวรี (รวมและที่ไม่ได้เพิ่มประสิทธิภาพข้อ ฯลฯ ) หรือการประมาณการ rowcount ปิดเนื่องจากสถิติที่ขาดหายไป / ล้าสมัย การจัดทำดัชนีไปยังแผนแบบสอบถามที่ไม่ดีอย่างไร้ความปราณีนั้นมักจะเป็นวิธีที่ดีที่สุดในการแก้ปัญหาด้วยคลื่นความถี่ซึ่งมีเพียงการปรับปรุงประสิทธิภาพที่เพิ่มขึ้นเท่านั้น

3) คุณอาจไม่เห็นภาพรวมทั้งหมด สิ่งนี้เป็นจริงโดยเฉพาะอย่างยิ่งเมื่อใช้เฉพาะแผนกราฟิกและไม่ดู XML เพื่อดูว่ามีดัชนีที่ขาดหายไปมากกว่าหนึ่งรายการหรือไม่ รายการที่แสดงก่อนในแผนกราฟิกไม่จำเป็นต้องเป็นรายการที่มีผลกระทบกับแบบสอบถามมากที่สุด

4) ฉันยังได้พบตัวอย่างมากมายของดัชนีใหม่ที่ได้รับการแนะนำเมื่อแก้ไขดัชนีที่มีอยู่จะทำ ดูคำตอบอื่น ๆ ที่นี่เกี่ยวกับประเด็นนี้พวกเขาเป็นจุดในไม่จำเป็นต้องให้ฉันอธิบายเพิ่มเติม

ฉันใช้คำแนะนำดัชนีที่ขาดหายไปเป็นจุดเริ่มต้นเมื่อทำงานกับข้อความค้นหา / สภาพแวดล้อมที่ไม่คุ้นเคยเพื่อดูว่าจะมองลึกลงไป ฉันได้รับผลลัพธ์ที่ดีกว่าการดูตัวดำเนินการในแผน (ส่วนใหญ่เป็นการค้นหา / สแกน / รวม) และตรวจสอบคำแนะนำเครื่องมือหรือหน้าต่างคุณสมบัติเพื่อดูว่าคอลัมน์ใดเกี่ยวข้องและใช้เพื่อกำหนดผู้สมัครดัชนีเพื่อทดสอบการปรับปรุง


2

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

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