ฉันค่อนข้างรู้คำตอบสำหรับคำถามนี้อยู่แล้ว แต่ฉันรู้สึกเสมอว่ามีมากกว่าที่ฉันต้องรับในหัวข้อ
ความเข้าใจพื้นฐานของฉันคือการพูดโดยทั่วไปดัชนีเดียวที่รวมเขตข้อมูลทั้งหมดที่คุณอาจทำการสืบค้น / เรียงลำดับในเวลาที่กำหนดไม่น่าจะมีประโยชน์ แต่ฉันได้เห็นสิ่งนี้แล้ว บางคนคิดว่า "เอาล่ะถ้าเราใส่ข้อมูลทั้งหมดลงในดัชนีฐานข้อมูลก็สามารถใช้เพื่อค้นหาสิ่งที่ต้องการ" โดยไม่ต้องเห็นแผนการดำเนินการสำหรับการสืบค้นจริงบางข้อ
ลองนึกภาพโต๊ะแบบนี้:
id int pk/uid
name varchar(50)
customerId int (foreign key)
dateCreated datetime
ผมอาจจะเห็นดัชนีเดียวรวมทั้งname
, customerId
และdateCreated
สาขา
แต่ความเข้าใจของฉันคือว่าดัชนีดังกล่าวจะไม่ถูกใช้ในแบบสอบถามเช่น:
SELECT [id], [name], [customerId], [dateCreated]
FROM Representatives WHERE customerId=1
ORDER BY dateCreated
สอบถามเช่นมันดูเหมือนว่าผมว่าเป็นความคิดที่ดีกว่าจะเป็นดัชนีรวมทั้งcustomerId
และdateCreated
เขตที่มีcustomerId
ข้อมูลเป็น 'ครั้งแรก' สิ่งนี้จะสร้างดัชนีที่จะมีการจัดระเบียบข้อมูลในลักษณะที่แบบสอบถามนี้สามารถค้นหาสิ่งที่ต้องการได้อย่างรวดเร็ว - ตามลำดับที่ต้องการ
อีกสิ่งที่ฉันเห็นบ่อยครั้งเป็นอันดับแรกคือดัชนีแต่ละรายการในแต่ละฟิลด์ เพื่อให้แต่ละคนบนname
, customerId
และdateCreated
สาขา
ไม่เหมือนตัวอย่างแรกข้อตกลงประเภทนี้บางครั้งฉันก็ดูเหมือนจะมีประโยชน์บางส่วน แผนการดำเนินการของแบบสอบถามอาจแสดงให้เห็นว่าอย่างน้อยก็ใช้ดัชนีในcustomerId
เพื่อเลือกระเบียน แต่ไม่ได้ใช้ดัชนีกับdateCreated
เขตข้อมูลเพื่อเรียงลำดับ
ฉันรู้ว่านี่เป็นคำถามที่กว้างขวางเพราะคำตอบเฉพาะสำหรับคำถามใด ๆ ในชุดของตารางใด ๆ มักจะเห็นว่าแผนการดำเนินการบอกว่ามันกำลังจะทำอะไรและนำข้อมูลเฉพาะของตารางและแบบสอบถามไปใช้ บัญชี. นอกจากนี้ฉันรู้ว่ามันขึ้นอยู่กับความถี่ในการเรียกใช้แบบสอบถามเมื่อเทียบกับค่าใช้จ่ายในการบำรุงรักษาดัชนีเฉพาะสำหรับมัน
แต่ฉันคิดว่าสิ่งที่ฉันถามคือ 'จุดเริ่มต้นทั่วไป' สำหรับดัชนีความคิดของการมีดัชนีเฉพาะสำหรับแบบสอบถามที่ดึงบ่อยและฟิลด์ในส่วนคำสั่ง WHERE หรือ ORDER BY เหมาะสมหรือไม่