Saya telah menambahkan indeks ke tabel yang digunakan untuk hasil pencarian. Saya menunjukkan hasil dengan urutan ASC atau DESC. Jadi kolom itu harus punya indeks atau tidak? Saya memiliki 2 indeks lagi di tabel itu. Bagaimana kinerja akan memengaruhi dengan membuat atau tidak membuat indeks ke kolom itu?
mysql
performance
index
order-by
Somnath Muluk
sumber
sumber
Jawaban:
Ya, MySQL dapat menggunakan indeks pada kolom di ORDER BY (dalam kondisi tertentu). Namun, MySQL tidak dapat menggunakan indeks untuk ASC campuran , pesanan DESC oleh (
SELECT * FROM foo ORDER BY bar ASC, pants DESC
). Membagikan pertanyaan Anda dan pernyataan CREATE TABLE akan membantu kami menjawab pertanyaan Anda secara lebih spesifik.Untuk petunjuk tentang cara mengoptimalkan ORDER BY klausa: http://dev.mysql.com/doc/refman/5.1/en/order-by-optimization.html
Edit 2012-01-21 8:53 AM
Ada pertanyaan tentang sumber pernyataan saya tentang penggunaan indeks dengan campuran ASC / DESC di ORDER BY. Dari dokumentasi ORDER BY Optimization :
Selain itu, kata kunci DESC tidak ada artinya dalam CREATE INDEX
sumber
CREATE INDEX idx_foo ON foo(bar ASC, pants DESC);
harus bekerja.ASC
danDESC
jika yangINDEX
memiliki campuran yang sama.Bagi siapa pun yang bertanya tentang jawaban yang terkait dengan PostgreSQL, jawabannya adalah ya, indeks akan digunakan. Sesuai dengan dokumentasi PostgreSQL , perencana kueri "akan mempertimbangkan memenuhi spesifikasi ORDER BY baik dengan memindai indeks yang tersedia yang sesuai dengan spesifikasi, atau dengan memindai tabel dalam urutan fisik dan melakukan pengurutan eksplisit." Ini berarti bahwa jika ada indeks yang dapat digunakan perencana itu akan melakukannya, kembali melakukan pengurutan setelah mengambil baris yang cocok.
sumber