Çoklu sıralama — raporların oluşturulmasında verileri birden fazla sütuna (örneğin, önce tarihe, sonra adı, sonra toplam tutara) göre sıralamak veya gruplamak gerektiğinde kritik bir araçtır. Geleneksel olarak sıralama genellikle sadece bir alan üzerinden uygulanmıştır, bu durum veri analizinin karmaşık ihtiyaçlarını karşılamaz.
Sorun sıklıkla sıralama düzeninin yanlış olmasından kaynaklanmaktadır (örneğin, NULL değerleri beklenmedik yerlerde ortaya çıkabilir), collation hataları (farklı dil kurallarının sıralama üzerindeki etkisi) ve büyük veri setlerindeki performans düşüşlerinden kaynaklanmaktadır.
Çözüm: Çok sütunlu ORDER BY kullanmak, COLLATION spesifiklerini göz önünde bulundurmak ve NULLS düzenini açıkça tanımlamak, sonuçların belirlenebilirliğini sağlamak, ayrıca büyük tablolar için sütunların indekslenmesini kontrol etmek.
Kod örneği:
SELECT * FROM sales ORDER BY region COLLATE "tr_TR", date DESC NULLS LAST, total_amount DESC;
Ana özellikler:
COLLATE belirtilmezse, farklı sunucularda sıralama her zaman aynı mı olacaktır?
Hayır! Varsayılan COLLATE veritabanı ve/veya sunucu ayarlarına bağlıdır ve karakter kümesi, özel karakterler ile sıralama sonuçları kurulumlar arasında farklılık gösterebilir.
Sıralama sırasında NULL'lar DESC ve ASC'de nereye yerleştirilir?
SQL standardı bunu kesin bir şekilde tanımlamaz. Bazı DBMS'lerde NULL'lar ASC'de yukarıda, bazılarında ise aşşağıda olur. Davranışı şeffaf hale getirmek için NULLS FIRST veya NULLS LAST açıkça belirtin.
ORDER BY price DESC NULLS LAST
Birden fazla sütuna göre ORDER BY indeks kullanımını etkiler mi?
Evet, ancak yalnızca eğer sütunların sırayı, türleri ve değer temizlikleri mevcut bir bileşik indeksle uyumluysa. Eğer düzen karışık (ASC/DESC) veya hesaplanmış alanlar kullanılıyorsa, indeks kullanılmayabilir.
Bir yönetici, COLLATE olmadan soyadı üzerinden ORDER BY ile bir rapor oluşturdu. Rapor farklı sunucular arasında taşındığında, Rus ve Latin soyadları yer değiştirmiş ve NULL'lar yukarıda veya aşağıda olabiliyordu.
Artıları:
Rapor, COLLATE ve NULL'un sırasını NULLS FIRST/LAST ile açıkça belirtti ve sıralama alanlarına bileşik indeks ekledi. Davranış ortamdan bağımsız hale geldi, sorgu hızı önemli ölçüde arttı.
Artıları: