ฉันจะทราบได้อย่างไรว่ามีการใช้ดัชนีเพื่อจัดเรียงใน MySQL หรือไม่


10

ฉันมีแบบสอบถามที่มีส่วนคำสั่ง ORDER BY ซึ่งใช้คอลัมน์ซึ่งเป็นคอลัมน์สุดท้ายของดัชนีที่ใช้ในส่วนคำสั่ง WHERE ซึ่งเป็นรูปแบบหลัก:

SELECT
  cols
FROM
  tables
WHERE
  col_1 = x
  AND col_2 = y
  AND col_3 = z
ORDER BY col_4

และดัชนีจะถูกสร้างในคอลัมน์ (col_1, col_2, col_3, col_4) ตามลำดับ

เมื่อฉันโปรไฟล์แบบสอบถามกว่า 99% ของเวลาที่ใช้ในสถานะ "ผลการเรียงลำดับ" col_4 เป็นคอลัมน์การประทับเวลาหากสร้างความแตกต่าง ฉันเข้าใจว่า ORDER BY สามารถใช้ดัชนีภายใต้สถานการณ์บางอย่างเท่านั้น แต่ฉันยังคงประหลาดใจเล็กน้อยเมื่อต้องใช้เครื่องมือเพิ่มประสิทธิภาพ

คำตอบ:


13

คุณควรต่อท้ายEXPLAIN EXTENDEDข้อความค้นหาและดูผลลัพธ์ด้วยตนเอง

มันควรมีรายการสำหรับ

  • possible_keys

หากคอลัมน์นี้เป็น NULL จะไม่มีดัชนีที่เกี่ยวข้อง ในกรณีนี้คุณอาจปรับปรุงประสิทธิภาพการสืบค้นของคุณได้โดยตรวจสอบ WHERE clause เพื่อตรวจสอบว่ามันหมายถึงคอลัมน์หรือคอลัมน์บางคอลัมน์ที่เหมาะสำหรับการจัดทำดัชนีหรือไม่

และ

  • คีย์

คอลัมน์คีย์ระบุคีย์ (ดัชนี) ที่ MySQL ตัดสินใจใช้จริง หาก MySQL ตัดสินใจใช้ดัชนีเป็นไปได้หนึ่งคีย์เพื่อค้นหาแถวดัชนีนั้นจะถูกแสดงเป็นค่าคีย์

สำหรับข้อมูลเพิ่มเติมคุณสามารถอ้างถึงสิ่งนี้อธิบายผลลัพธ์และอธิบาย join_types


ฉันเข้าใจว่าคำถามของฉันโดยเฉพาะคือทำตามคำสั่ง ORDER BY แบบสอบถามของฉันใช้ดัชนีที่ระบุเพื่อ จำกัด แถวที่ส่งคืน แต่ได้รับประสิทธิภาพของการเรียงลำดับฉันคาดเดาว่าไม่ได้ใช้มันสำหรับประโยค ORDER BY
Chris Cooper

1
ในบางกรณี MySQL สามารถใช้ดัชนีเพื่อสนองข้อ ORDER BY โดยไม่ต้องทำการเรียงลำดับพิเศษใด ๆ ดัชนีสามารถใช้แม้ว่า ORDER BY จะไม่ตรงกับดัชนีทั้งหมดตราบใดที่ส่วนที่ไม่ได้ใช้ทั้งหมดของดัชนีและคอลัมน์ ORDER BY พิเศษทั้งหมดทั้งหมดยังคงอยู่ในส่วนคำสั่ง WHERE แบบสอบถามต่อไปนี้ใช้ดัชนีเพื่อแก้ไขส่วนการสั่งซื้ออ้างอิงdev.mysql.com/doc/refman/5.0/en/order-by-optimization.html
Mahesh Patil

1

คุณใช้EXPLAINแบบสอบถามของคุณ ( explain select-or-whatever-your-query-is)

possible_keysแสดงสิ่งที่สามารถใช้ได้keyจริง ๆ ที่ใช้


1
หากต้องการเพิ่มไปยัง: explain format=json select ...มีประสิทธิภาพยิ่งขึ้น ซึ่งรวมถึงused_key_partsซึ่งจะบอกคุณว่ามีการใช้คีย์ผสมบางส่วนหรือทั้งหมดและindex_conditionจะบอกคุณว่าส่วนใดของแบบสอบถามที่รับผิดชอบดัชนีใด
okdewit
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.