Verilen senin o spesifikasyonu olan tüm sütunları seçerek, küçük bir fark vardır şu anda . Ancak, veritabanı şemalarının değiştiğini anlayın. Eğer kullanırsanız SELECT *
bile olasılıkla olsa tabloya eklenir herhangi bir yeni sütunlar almak için gidiyoruz, kodunuz yeni veriler bu kullanıma veya günümüze kadar hazır değil. Bu, sisteminizi beklenmedik performans ve işlevsellik değişikliklerine maruz bıraktığınız anlamına gelir.
Bunu küçük bir maliyet olarak reddetmeye istekli olabilirsiniz, ancak ihtiyacınız olmayan sütunların yine de olması gerektiğini unutmayın:
- Veritabanından okuma
- Ağ üzerinden gönderildi
- İşleminize uygun
- (ADO tipi teknolojiler için) Veri tablosundaki bellekte kaydedildi
- Yok sayıldı ve atıldı / çöp toplandı
Öğe # 1, bazı potansiyel kaplama dizinini ortadan kaldırmak, veri sayfası yüklerine (ve sunucu önbellek bozulmasına neden olmak), aksi takdirde önlenebilecek satır / sayfa / tablo kilitlerine neden olmak gibi birçok gizli maliyete sahiptir.
Bunu, sütunları *
bire karşı belirlemenin potansiyel tasarruflarına karşı dengeleyin ve tek potansiyel tasarruf:
- Programcının sütun eklemek için SQL'i tekrar ziyaret etmesi gerekmez
- SQL'in ağ aktarımı daha küçük / daha hızlı
- SQL Server sorgu ayrıştırma / doğrulama süresi
- SQL Server sorgu planı önbelleği
1. madde için gerçek şu ki, ekleyebileceğiniz herhangi bir yeni sütunu kullanmak için kod ekleyeceksiniz / değiştireceksiniz, bu yüzden bir yıkama.
Öğe 2 için, fark sizi farklı bir paket boyutuna veya ağ paketlerinin sayısına itmek için nadiren yeterlidir. SQL deyimi iletim zamanının baskın olduğu noktaya gelirseniz, muhtemelen önce ifade oranını azaltmanız gerekir.
3. madde için *
, zaten genişlemenin gerçekleşmesi gerektiği için tasarruf YOKTUR , bu da yine de tablo (lar) şemasına danışmak anlamına gelir. Gerçekçi olarak, sütunları listelemek aynı şemaya neden olacaktır, çünkü şemaya göre doğrulanması gerekir. Başka bir deyişle, bu tam bir yıkamadır.
4. madde için, belirli sütunları belirttiğinizde, sorgu planı önbelleğiniz daha büyük olabilir, ancak yalnızca farklı sütun kümeleriyle (belirttiğiniz şekilde değil) ilgileniyorsanız. Bu durumda, gerektiğinde farklı planlar istediğiniz için farklı önbellek girdileri istersiniz.
Bu nedenle, soruyu belirtme şekliniz nedeniyle, sonuçta ortaya çıkan şema değişiklikleri karşısında sorunun esnekliğine tüm bunlar iner. Bu şemayı ROM'a yazıyorsanız (olur), o zaman bir *
mükemmel kabul edilebilir.
Bununla birlikte, genel yönergem, yalnızca ihtiyacınız olan sütunları seçmeniz gerektiğidir, bu da bazen hepsini istiyormuşsunuz gibi görünecektir, ancak DBA'lar ve şema gelişimi, sorguyu büyük ölçüde etkileyebilecek bazı yeni sütunların görünebileceği anlamına gelir .
Benim tavsiyem, HER ZAMAN belirli sütunları SEÇMenizdir . Tekrar tekrar yaptığınız işte iyi olduğunuzu unutmayın, bu yüzden doğru yapma alışkanlığına sahip olun.
Bir şemanın kod değiştirmeden neden değişebileceğini merak ediyorsanız, denetim günlüğü, geçerlilik / son kullanma tarihleri ve uyumluluk sorunları için DBA'lar tarafından sistematik olarak eklenen diğer benzer şeyleri düşünün. Elde edilen değişikliklerin bir başka kaynağı, sistemdeki veya kullanıcı tanımlı alanlardaki başka bir yerde performans için denormalizasyonlardır.