ฉันจำเป็นต้องเพิ่มดัชนีคอลัมน์เดี่ยวใหม่ลงในตารางหรือไม่หากมีดัชนีหลายคอลัมน์ในฟิลด์นั้นอยู่แล้ว


10

ฉันได้ตารางที่มีหลายคอลัมน์UNIQUEดัชนีในและ_job_id____keyword_id__

ฉันจะต้องเพิ่มดัชนีอื่นหรือไม่__job_id__หากฉันมีแบบสอบถามบ่อยซึ่งดำเนินการGROUP BYในคอลัมน์นั้น

(ที่ 100 ล้านแถวอาจใช้เวลาสักครู่นี่คือเหตุผลที่ฉันถามแทนที่จะทำ)


หากคำถามจริงของคุณเกี่ยวกับการสืบค้นที่ช้าโปรดระบุ SHOW CREATE TABLE แสดงสถานะของตารางแสดง VARIABLES เช่น '% buffer%' อธิบายถึงการเลือก ... มี RAM เท่าใด? มีเหตุผลที่เป็นไปได้มากมาย ส่วนใหญ่สามารถเห็นได้โดยการดูรายการเหล่านั้น
Rick James

คำตอบ:


5

ไม่เลย !!! เครื่องมือเพิ่มประสิทธิภาพการสืบค้นข้อมูลของ MySQL จะทำสิ่งที่ถูกต้องหากคอลัมน์หลักที่ต้องการอยู่ด้านซ้ายสุดในดัชนี หากคุณทำดัชนีเช่นนี้เครื่องมือเพิ่มประสิทธิภาพการสืบค้น MySQL อาจเลือกที่จะไม่ใช้ดัชนีนั้นหากคุณใช้ GROUP BY job_id, keyword_id เครื่องมือเพิ่มประสิทธิภาพการสืบค้น MySQL อาจใช้ดัชนีหรือไม่ก็ได้หากคุณรวบรวมบันทึกด้วย job_id เท่านั้น แต่คุณมีดัชนีซ้ำซ้อนที่สิ้นเปลืองพื้นที่อยู่แล้ว

หากตารางคือ MyISAM การสร้างดัชนีจะทำให้ไฟล์ MYI ขยายตัว

หากตารางคือ InnoDB และ innodb_file_per_table เป็น 0 การสร้างดัชนีดังกล่าวก็จะขยายตัว ibdata1

หากตารางคือ InnoDB และ innodb_file_per_table คือ 1 การสร้างดัชนีดังกล่าวจะทำให้ไฟล์. ibd ของตารางขยายตัวออกไป

โดยสรุปคุณไม่จำเป็นต้องสร้างดัชนีเพิ่มเติม !!!


คุณแน่ใจไหม? ผู้ชายคนนี้แนะนำเป็นอย่างอื่น: stackoverflow.com/questions/179085/ …หรือแตกต่างจาก MySQL เป็น MSSQL หรือไม่?
Tadej

4

ดัชนีสามารถเพิ่มความเร็วในgroup byการดำเนินการได้โดยลดการเรียงลำดับซึ่งจะมีประสิทธิภาพมากขึ้นถ้าดัชนีที่ใช้เป็นดัชนีคลัสเตอร์หรืออย่างน้อยมีคอลัมน์นำหน้าเหมือนกับดัชนีคลัสเตอร์ ในทั้งหมดนี้ฉันสมมติว่า MySQL ไม่มีการhash group byดำเนินการเทียบเท่าซึ่งโดยปกติแล้วจะข้ามผลประโยชน์ของดัชนีใด ๆ - บางทีคนอื่นสามารถยืนยันสิ่งนี้

มีข้อดีเล็กน้อยที่จะมีดัชนีแยกต่างหากjob_idโดยสมมติว่าเป็นคอลัมน์เดียวในส่วนgroup byคำสั่งและไม่เป็นดัชนีกลุ่ม: ดัชนีจะมีขนาดเล็กลงดังนั้นการสแกนจะสร้าง I / O น้อยลง

--EDIT--

เนื่องจากดัชนีมีฟิลด์คีย์หลักทั้งหมดที่กำหนดไว้สำหรับคีย์ดัชนีคลัสเตอร์ที่ไม่ได้อยู่ในดัชนีรองดัชนีบนjob_idจะมีขนาดเล็กกว่าดัชนีในjob_id, keyword_idหากkeyword_idไม่ได้เป็นส่วนหนึ่งของดัชนีคลัสเตอร์

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