เรียงตามคอลัมน์ควรมีดัชนีหรือไม่


35

ฉันได้เพิ่มดัชนีในตารางซึ่งใช้สำหรับผลการค้นหา ฉันกำลังแสดงผลลัพธ์ตามลำดับ ASC หรือ DESC ดังนั้นคอลัมน์นั้นควรมีดัชนีหรือไม่? ฉันมีอีก 2 ดัชนีในตารางนั้น ประสิทธิภาพจะมีผลต่อการสร้างดัชนีหรือไม่สร้างดัชนีในคอลัมน์นั้น


2
กรุณาโพสต์คำถาม
RolandoMySQLDBA

คำตอบ:


26

ใช่ MySQL สามารถใช้ดัชนีในคอลัมน์ใน ORDER BY (ภายใต้เงื่อนไขที่แน่นอน) อย่างไรก็ตาม MySQL ไม่สามารถใช้ดัชนีสำหรับการผสม ASC , คำสั่ง DESC โดย ( SELECT * FROM foo ORDER BY bar ASC, pants DESC) การแชร์ข้อความค้นหาและคำสั่ง CREATE TABLE จะช่วยให้เราตอบคำถามของคุณได้ชัดเจนยิ่งขึ้น

สำหรับคำแนะนำเกี่ยวกับวิธีเพิ่มประสิทธิภาพการเรียงลำดับคำสั่ง: http://dev.mysql.com/doc/refman/5.1/en/order-by-optimization.html

แก้ไข 2012-01-21 8:53 AM

มีคำถามเกี่ยวกับแหล่งที่มาของคำสั่งของฉันเกี่ยวกับการใช้ดัชนีที่มี ASC / DESC ผสมใน ORDER BY จากเอกสารการเพิ่มประสิทธิภาพ ORDER BY :

ในบางกรณี MySQL ไม่สามารถใช้ดัชนีเพื่อแก้ไข ORDER BY แม้ว่ามันจะยังคงใช้ดัชนีเพื่อค้นหาแถวที่ตรงกับส่วนคำสั่ง WHERE กรณีเหล่านี้ ได้แก่ :

...

คุณผสม ASC และ DESC:

SELECT * จากคำสั่ง t1 โดย key_part1 DESC, key_part2 ASC;

...

นอกจากนี้คำหลัก DESC นั้นไม่มีความหมายใน CREATE INDEX

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


3
"MySQL ไม่สามารถใช้ดัชนีสำหรับ ASC ผสม DESC" อ้างอิงสำหรับสิ่งนี้?
ypercubeᵀᴹ

CREATE INDEX idx_foo ON foo(bar ASC, pants DESC);ควรทำงาน.
Frank Heikens

แหล่งที่มาของฉันคือเอกสาร mysql ที่เชื่อมโยงในคำตอบของฉัน ค้นหา "mix."
Aaron Brown

3
MySQL จะแยกวิเคราะห์เรียง & เรียงใน CREATE INDEX แต่ไม่ต้องสนใจ ดัชนีจะถูกจัดเก็บตามลำดับจากน้อยไปมาก dev.mysql.com/doc/refman/5.5/th/create-index.html
Aaron Brown Brown

1
ใหม่กับ MySQL 8.0 : ตอนนี้ก็สามารถใช้เป็นส่วนผสมของASCและDESC ถ้าINDEXมีส่วนผสมเดียวกัน
Rick James

4

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

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