it-swarm.asia

Pesanan menurut kolom harus ada indeks atau tidak?

Saya telah menambahkan indeks ke tabel yang digunakan untuk hasil pencarian. Saya menunjukkan hasil berdasarkan pesanan 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?

38
Somnath Muluk

Ya, MySQL dapat menggunakan indeks pada kolom di ORDER BY (dalam kondisi tertentu). Namun, MySQL tidak dapat menggunakan indeks untuk campur ASC, 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

Ada pertanyaan tentang sumber pernyataan saya tentang penggunaan indeks dengan campuran ASC/DESC di ORDER BY. Dari ORDER BY Optimization dokumentasi:

Dalam beberapa kasus, MySQL tidak dapat menggunakan indeks untuk menyelesaikan ORDER BY, meskipun masih menggunakan indeks untuk menemukan baris yang cocok dengan klausa WHERE. Kasus-kasus ini meliputi:

...

Anda mencampur ASC dan DESC:

SELECT * DARI t1 ORDER OLEH key_part1 DESC, key_part2 ASC;

...

Juga, kata kunci DESC adalah tidak berarti dalam CREATE INDEX

Spesifikasi index_col_name dapat diakhiri dengan ASC atau DESC. Kata kunci ini diizinkan untuk ekstensi di masa mendatang untuk menentukan penyimpanan nilai indeks naik atau turun. Saat ini, mereka diurai tetapi diabaikan; nilai indeks selalu disimpan dalam urutan menaik.

29
Aaron Brown

Bagi siapa pun yang bertanya tentang jawaban yang terkait dengan PostgreSQL, jawabannya adalah ya, indeks akan digunakan. Sesuai dengan Dokumentasi PostgreSQL perencana permintaan "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.

6
douglasr