Sütuna göre sırala, dizine sahip olmalı ya da değil mi?


35

Arama sonucu için kullanılan tabloya indeksler ekledim. Sonuçları ASC veya DESC siparişine göre gösteriyorum. Öyleyse bu sütunun indeksi olmalı mı yoksa değil mi? Bu masada 2 tane daha indeksim var. Performans, bu sütuna indeks yapıp yapmamaktan nasıl etkilenir?


2
Lütfen sorgunuzu gönderin
RolandoMySQLDBA

Yanıtlar:


26

Evet, MySQL SİPARİŞ BY (belirli koşullar altında) sütunlarında bir dizin kullanabilir. Ancak, MySQL karışık ASC, DESC sıralaması ( SELECT * FROM foo ORDER BY bar ASC, pants DESC) için bir dizin kullanamaz . Sorgunuzu ve CREATE TABLE ifadesini paylaşmak, sorunuzu daha özel olarak yanıtlamamıza yardımcı olur.

ORDER BY cümlelerinin nasıl optimize edileceğine dair ipuçları için: http://dev.mysql.com/doc/refman/5.1/en/order-by-optimization.html

Düzenle 2012-01-21 08:53

SİPARİŞ BY içinde karışık ASC / DESC ile bir dizin kullanma hakkında benim ifadenin kaynağı hakkında sorular vardı. Gönderen Optimizasyon ORDER BY belgelerinde:

Bazı durumlarda, MySQL, ORDER BY'ı çözmek için dizin kullanamaz, ancak yine de WHERE deyimiyle eşleşen satırları bulmak için dizinler kullanır. Bu durumlar aşağıdakileri içerir:

...

ASC ve DESC'yi karıştırın:

SEÇİMİ * t1 SİPARİŞİNDEN key_part1 DESC, key_part2 ASC;

...

Ayrıca, DESC anahtar sözcüğü CREATE INDEX'te anlamsızdır

Bir index_col_name belirtimi ASC veya DESC ile bitebilir. Bu anahtar kelimelere, artan veya azalan endeks değeri depolamasını belirlemek için gelecekteki uzantılar için izin verilir. Şu anda, ayrıştırılmış ancak dikkate alınmamıştır; Endeks değerleri her zaman artan düzende saklanır.


3
"MySQL karışık ASC, DESC için bir dizin kullanamaz" . Bunun için referans?
ypercubeᵀᴹ

CREATE INDEX idx_foo ON foo(bar ASC, pants DESC);çalışmalı.
Frank Heikens,

Kaynağım, cevabımda bağlantılı mysql belgeleri. "Mix" için arama yapın
Aaron Brown

3
MySQL, CREATE INDEX içindeki asc ve Desc öğelerini ayrıştırır ancak bunları yok sayar. Dizinler her zaman artan düzende saklanır. dev.mysql.com/doc/refman/5.5/en/create-index.html
Aaron Brown

1
Yeni MySQL 8.0 : Şimdi bir karışımını kullanabilir ASCve DESC eğerINDEX aynı karışımı yer alır.
Rick James

4

PostgreSQL ile ilgili cevabını merak eden herkes için cevap evet, bir endeks kullanılacak. Gereğince PostgreSQL belgelerine sorgu planlayıcısı "özellikleri ile uyumlu kullanılabilir bir endeks tarayarak ya şartnamede bir ORDER BY tatmin dikkate alacaktır, ya da fiziksel sırayla tablonun taranmasını ve açık bir çeşit yaparak." Bunun anlamı, planlayıcının kullanabileceği bir dizin olması durumunda, bunu yapması, eşleşen satırları aldıktan sonra bir sıralamaya geri dönmesidir.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.