ฉันได้เพิ่มดัชนีในตารางซึ่งใช้สำหรับผลการค้นหา ฉันกำลังแสดงผลลัพธ์ตามลำดับ ASC หรือ DESC ดังนั้นคอลัมน์นั้นควรมีดัชนีหรือไม่? ฉันมีอีก 2 ดัชนีในตารางนั้น ประสิทธิภาพจะมีผลต่อการสร้างดัชนีหรือไม่สร้างดัชนีในคอลัมน์นั้น
ฉันได้เพิ่มดัชนีในตารางซึ่งใช้สำหรับผลการค้นหา ฉันกำลังแสดงผลลัพธ์ตามลำดับ ASC หรือ DESC ดังนั้นคอลัมน์นั้นควรมีดัชนีหรือไม่? ฉันมีอีก 2 ดัชนีในตารางนั้น ประสิทธิภาพจะมีผลต่อการสร้างดัชนีหรือไม่สร้างดัชนีในคอลัมน์นั้น
คำตอบ:
ใช่ 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 คำหลักเหล่านี้ได้รับอนุญาตสำหรับส่วนขยายในอนาคตสำหรับการระบุการจัดเก็บค่าดัชนีขึ้นหรือลง ปัจจุบันมีการแยกวิเคราะห์ แต่ไม่สนใจ ค่าดัชนีจะถูกจัดเก็บตามลำดับจากน้อยไปมาก
CREATE INDEX idx_foo ON foo(bar ASC, pants DESC);
ควรทำงาน.
ASC
และDESC
ถ้าINDEX
มีส่วนผสมเดียวกัน
สำหรับทุกคนที่สงสัยเกี่ยวกับคำตอบที่เกี่ยวข้องกับ PostgreSQL คำตอบคือใช่จะมีการใช้ดัชนี ตามเอกสาร PostgreSQLเครื่องมือวางแผนแบบสอบถาม "จะพิจารณาความพึงพอใจของข้อกำหนด ORDER BY โดยการสแกนดัชนีที่มีอยู่ซึ่งตรงกับข้อมูลจำเพาะหรือโดยการสแกนตารางตามลำดับจริงและทำการเรียงลำดับอย่างชัดเจน" ซึ่งหมายความว่าหากมีดัชนีที่ผู้วางแผนสามารถใช้ได้ก็ให้กลับไปที่การเรียงลำดับหลังจากเรียกแถวที่ตรงกัน