2
เหตุใดการสร้างดัชนีใหม่นี้จึงปรับปรุงประสิทธิภาพมากขึ้นเมื่อดัชนีที่มีอยู่รวมคอลัมน์ทั้งหมดในดัชนีใหม่
ฉันมีตารางบันทึกและ LogItem ฉันกำลังเขียนแบบสอบถามเพื่อดึงข้อมูลจากทั้งสองอย่าง มีหลายพันLogsและแต่ละคนLogสามารถมีได้มากถึง 125LogItems คำถามที่ถามมีความซับซ้อนดังนั้นฉันจึงข้ามมัน (ถ้ามีคนคิดว่ามันเป็นสิ่งสำคัญที่ฉันสามารถโพสต์ได้) แต่เมื่อฉันรันแผนแบบสอบถาม SSMS โดยประมาณมันบอกฉันว่าดัชนีที่ไม่เป็นคลัสเตอร์ใหม่จะปรับปรุงประสิทธิภาพได้สูงสุด 100% . Existing Index: Non-clustered Key Colums (LogItem): ParentLogID, DateModified, Name, DatabaseModified Query Plan Recommendation CREATE NONCLUSTERED INDEX [LogReportIndex] ON [dbo].[LogItem] ([ParentLogID],[DatabaseModified]) เพียงเพื่อความสนุกฉันสร้างดัชนีใหม่นี้และเรียกใช้คิวรีและสร้างความประหลาดใจให้กับฉันมากตอนนี้ใช้เวลาประมาณ 1 วินาทีในการเรียกใช้คิวรีของฉันก่อนที่จะนานกว่า 10 วินาที ฉันคิดว่าดัชนีที่มีอยู่ของฉันจะครอบคลุมแบบสอบถามใหม่นี้ดังนั้นคำถามของฉันคือเหตุผลที่สร้างดัชนีใหม่ในคอลัมน์เดียวที่ใช้ในแบบสอบถามใหม่ของฉันปรับปรุงประสิทธิภาพหรือไม่ ฉันควรมีดัชนีสำหรับชุดค่าผสมที่ไม่ซ้ำกันของคอลัมน์ที่ใช้ในส่วนwhereคำสั่งของฉันหรือไม่? หมายเหตุ: ฉันไม่คิดว่านี่เป็นเพราะ SQL Server กำลังแคชผลลัพธ์ของฉันฉันรันเคียวรีประมาณ 25-30 ครั้งก่อนที่ฉันจะสร้างดัชนีและใช้เวลาประมาณ 10-15 วินาทีหลังจากดัชนีตอนนี้สอดคล้องกัน ~ 1 …
19
sql-server
index