2009-12-03 22 views
15

Sadece basit bir soru, ancak birden çok sütuna yayıldığında dizininizin sırası önemli değil mi? Benim endeksi böyle oluşturulursaBirden çok sütunta dizin dizisi

 
SELECT * FROM my_table WHERE (column_1 = 1 AND column_2 = 2) 

böyle bir sorgu için bir dizin eklemek istiyorsanız, bu önemli mi:

 
CREATE INDEX my_index 
ON my_table (column_1, column_2) 

Veya sorgu alarak Örneğin

, bunun gibi:

 
CREATE INDEX my_index 
ON my_table (column_2, column_1) 

Yardımın için teşekkürler!

cevap

21

Verdiğiniz örnekte, sütun sırası önemli değil.

Bir sütunda sipariş ederseniz önemli olur; (col1,col2)'daki bir dizin ORDER BY col1, col2 için kullanılabilir, ancak ORDER BY col2, col1 için kullanılamaz.

WHERE tümcelerinde, (col1, col2) için bir dizin WHERE col1 = 1 AND col2 = 1 için çalışır. Ayrıca WHERE col1 = 1 için çalışır. Ancak WHERE col2 = 1 ile yardımcı olamaz.

+4

Aslında bu durumda bile önemli olabilir. Hemen hemen her satırda col1 = 1 varsa, her ikisi de sorguladığınız halde, col2 ilk olsa bile, dizin büyük olasılıkla daha iyi çalışır. –

+3

Sağlanan örnekte, bir sütunun diğerinden daha önemli bir higer elesctivitesi varsa, önemli olabilir. İlk önce yüksek seçiciliğe sahip sütunlar (birçok farklı değer) koyun. – Manu

+0

Bir sistemde halihazırda bulunan dizinlerin nasıl vurulacağını anlamanıza yardımcı olması için bu yanıtta mükemmel bilgiler. – Swoop

0

Öğrenmenin en iyi yolu bunu ölçmektir. Birini deneyin, performansı ölçün, ardından bu dizini kaldırın ve diğerini deneyin. Tipik olarak, diskteki dizinde birbirine yakın konumlandırılmak üzere sorgulanan veriyi ve dizindeki sütunların sırasının, dizinin diskte depolanma biçiminde bir fark yaratmasını istersiniz. Tam olarak hangi indeks kombinasyonunun en iyi şekilde çalışacağını tahmin etmek çok zordur, bu yüzden birkaç farklı olasılık deneyin ve verileriniz için hangisinin en iyi olduğunu bulmak için ölçün.

İlgili konular