- SQLite adalah penyimpanan berbasis baris yang disimpan ke disk dalam struktur B-tree, dan mengeksekusi kueri menggunakan mesin virtual bernama VDBE. SQLite dapat berjalan di hampir semua lingkungan secara single-threaded tanpa bergantung pada platform.
- Meskipun merupakan database serbaguna, SQLite sangat unggul untuk beban kerja OLTP. Pada 2015, para peneliti dari University at Buffalo menemukan bahwa sebagian besar kueri adalah lookup key-value sederhana dan kueri OLAP yang kompleks.
- Para peneliti dari University of Wisconsin–Madison berupaya mempercepat kueri analitik. Mereka membandingkan performa menggunakan DuckDB dan Star Schema Benchmark (SSB).
Penyebab
- Untuk mengetahui mengapa SQLite lambat, mereka menggunakan opsi
VDBE_PROFILE untuk mengukur siklus CPU yang dikonsumsi oleh setiap instruksi VDBE.
- Dua opcode,
SeekRowID dan Column, terungkap sebagai penyebab utama.
Join Database
- Cara database mengimplementasikan join meliputi nested loop join, hash join, dan sort-merge join.
- SQLite menggunakan "nested loop join" yang paling sederhana. Metode ini mirip dengan penelusuran B-tree sehingga biayanya tinggi.
Pentingnya Optimasi Join
- Dalam operasi join, urutan tabel itu penting. Mengubah urutannya dapat sangat mengurangi jumlah operasi. Ini adalah masalah yang NP-hard.
- Ada dua algoritme join yang lebih baik daripada nested loop join, tetapi hash join mengonsumsi banyak memori, sementara SQLite umumnya berjalan di lingkungan dengan keterbatasan memori.
- Para peneliti menggunakan Bloom filter untuk meningkatkan efisiensi ruang dan menyesuaikannya dengan cache line CPU. Mereka menambahkan dua opcode,
Filter dan FilterAdd.
Hasil
- Setelah optimasi, bar biru besar pada analisis siklus CPU hampir hilang.
- SQLite menjadi 7 hingga 10 kali lebih cepat. Hasil penelitian ini diterapkan pada SQLite v3.38.0.
- Bloom filter sangat cocok dengan implementasi SQLite yang sederhana dan bekerja di dalam query engine yang sudah ada dengan overhead memori yang minimal
3 komentar
Saya baru memeriksa versinya, dan sistem saya menggunakan 3.42.0. Versi terbaru saat ini adalah 3.47.2.
Sepertinya saya perlu memeriksa versi SQLite yang sedang saya gunakan sekarang.
Sebenarnya, selain itu saya juga sedang membuat file Excel menggunakan openpyxl, tetapi memakan banyak waktu, jadi saya perlu mencari tahu apakah ada pustaka lain.
Mungkin sebaiknya Anda melakukan profiling terlebih dahulu?