SQLite İndeks Görselleştirmesi: Yapı
- İndekslerin önemi: SQLite; tarayıcılarda, mobil uygulamalarda ve işletim sistemlerinde yaygın olarak kullanılan bir VTYS'dir ve indeks yapısını anlamakla diskte ve bellekte nasıl saklandığını incelemek için uygundur.
Düğüm ve sayfa yapısı
- B-ağacı yapısı: SQLite'ın indeksleri B-ağacı yapısında saklanır ve her düğüm birden fazla çocuğa sahiptir.
- Sayfalar ve hücreler: Sayfalar hücre verilerini saklar ve sağdaki çocuk sayfaya bir bağlantı içerir. Hücreler ise indeks verisi, rowId ve soldaki çocuk sayfaya bağlantı içerir.
SQLite kaynak kodu analizi
- Kod örneği: İndeks analizi için bir fonksiyon yazılıyor. Örneğin
sqlite3DebugBtreeIndexDump fonksiyonu, seçilen indeksin içeriğini okuyup yazdırır.
- Docker kullanımı: Docker kullanılarak indeks dökümü test edilebilir.
İndeks görselleştirme
- Görselleştirme aracı: İndeks yapısını görselleştirmek için d3-org-tree kütüphanesi kullanılmak istendi, ancak yapıyı metinle göstermek daha basittir.
- PHP ImageMagick: PHP'nin ImageMagick eklentisi kullanılarak tasarım ve aralığı kontrol edilebilen görseller üretilir.
Çeşitli indeks örnekleri
- Temel indeks: 1 kayıttan oluşan basit bir indeks.
- Farklı kayıt sayıları: 1.000 ve 1.000.000 kayıt içeren indeksler.
- Sıralama yönü karşılaştırması: ASC ve DESC sıralama yönlerine sahip indekslerin karşılaştırılması.
- İfade tabanlı veri: İfadeler kullanılarak indeks oluşturulması.
- NULL değerleri içeren benzersiz indeks: SQLite, NULL değerleri olan benzersiz indeksleri destekler.
- Kısmi indeks: NULL değerler filtrelenerek indeks oluşturulması.
- Çok sütunlu indeks: Birden fazla sütun içeren indeks oluşturulması.
İndeks optimizasyonu
- VACUUM ve REINDEX: Mevcut indeksleri optimize etmek için kullanılan komutlar.
- Metin verisi: Kısa dizeler doğrudan indeks hücresinde saklanırken, uzun metinler ayrı olarak saklanır.
- Kayan noktalı veri: Kayan noktalı veri içeren indeks oluşturulması.
Sonuç
- İndeks yapısını anlama: SQLite'ın indeks yapısı ile B-ağacında verinin nasıl saklandığı ve erişildiği anlaşılır.
- Görselleştirmenin önemi: Görselleştirme sayesinde farklı indeksler analiz edilip karşılaştırılabildi.
- Gelecek planları: İndeks tabanlı arama görselleştirmesi ve ilginç SQL sorgularını inceleme planlanıyor.
1 yorum
Hacker News görüşleri
SQLite tablosundaki her satır varsayılan olarak benzersiz bir
rowId'ye sahiptir; bu da açıkça tanımlanmadığında birincil anahtar gibi çalışırrowIdkullanılırWITHOUT ROWIDtablolarının birincil anahtar indeksini görselleştirmek iyi olurdurowid) yüklenmesi gerekip gerekmediği ya da verinin zaten orada olup olmadığı (ROWIDolmadan), özellikle aralık sorgularında önemlidirVeritabanı yönetim sistemlerinin (DBMS) diskte ve bellekte indeksleri nasıl saklayıp geri getirdiğini görmek istedim
Site çok kolay okunuyor, bu yüzden okumak istiyorum
"indexes", hem "to index" fiilinin üçüncü tekil şahıs geniş zaman biçimi hem de "index" isminin çoğul hali olarak kullanılır
PostgreSQL'in aynı işi nasıl yaptığını görüp karşılaştırmak ve notlar eklemek iyi olabilir
yEd için
tgfüretmek, daha az emekle daha fazla düzen seçeneği elde etmeyi sağlayabilir