Son zamanlarda SQL'in berbat bir dil olduğunu çok duydum ve görünüşe göre güneşin altındaki her çerçeve bir veritabanı soyutlama katmanı ile önceden paketlenmiş olarak geliyor.
Bu katmanların yalnızca kendi öğelerini SQL
. Çoğu veritabanı satıcısı SQL
için motorla iletişim kurmanın tek yolu budur.
Deneyimlerime göre SQL, veri giriş ve çıkışını yönetmenin genellikle çok daha kolay, daha çok yönlü ve daha programcı dostu bir yoludur. Kullandığım her soyutlama katmanı, gerçek bir faydası olmayan, belirgin şekilde sınırlı bir yaklaşım gibi görünüyor.
… Yukarıda anlattığım neden.
Veritabanı katmanları yok eklemek şey, sadece sınırlamak seni. Sorguları tartışmalı şekilde daha basit hale getirirler, ancak asla daha verimli hale getirmezler.
Tanım olarak, veritabanı katmanlarında içinde olmayan hiçbir şey yoktur SQL
.
Bu SQL
kadar korkunç yapan nedir ve veritabanı soyutlama katmanları neden değerlidir?
SQL
güzel bir dil, ancak onunla çalışmak için biraz kafa karıştırıcı gerekiyor.
Teoride, SQL
açıklayıcıdır, yani ne almak istediğinizi beyan edersiniz ve motor bunu mümkün olan en hızlı şekilde sağlar.
Pratikte, doğru bir sorguyu formüle etmenin birçok yolu vardır (bu, doğru sonuçları döndüren sorgu).
İyileştiriciler, önceden tanımlanmış bazı algoritmalardan bir Lego kalesi inşa edebilirler (evet, çokturlar), ancak yeni algoritmalar yapamazlar. SQL
Onlara yardımcı olmak için hala bir geliştirici gerekiyor.
Ancak, bazı insanlar optimize edicinin "mümkün olan en iyi planı" üretmesini bekler, "bu sorgu için mevcut olan en iyi planı, SQL
motorun .
Ve hepimizin bildiği gibi, bilgisayar programı insanların beklentilerini karşılamadığında, suçlanan programdır, beklentiler değil.
Ancak çoğu durumda, bir sorguyu yeniden formüle etmek gerçekten de mümkün olan en iyi planı üretebilir. Bununla birlikte, yeni ve artan iyileştirmelerle birlikte, imkansız olduğu görevler vardır.SQL
bu vakalardaki .
Yine de rowid
, C
derleyicilerin derlemeyi doğrudan dile yerleştirmenize izin vermesi gibi , satıcılar "dizin aralığını elde etme", "satıra göre bir satır alma " gibi işlevlere bazı düşük düzeyli erişim sağlasaydı iyi olurdu .
Yakın zamanda blogumda bununla ilgili bir makale yazdım: