Latihan 1: Database Query Performance — Performance
Latihan 1 dari materi Database Query Performance di Performance — praktek dengan editor kode interaktif, test case otomatis, dan hint terpandu. Langsung jalan di browser.
Lengkapi dua function di kode awal.
analyzeQuery(query) menerima string SQL dan mengembalikan { issues, suggestions }: dua array string, dengan urutan key issues lalu suggestions. Cek berurutan:
Kalau query mengandung SELECT *, tambahkan issue "SELECT * mengambil semua kolom" dan suggestion "Pilih kolom spesifik yang dibutuhkan".
Kalau query mengandung LIKE '% (LIKE, spasi, kutip satu, persen), tambahkan issue "LIKE dengan wildcard di awal" dan suggestion "Gunakan Full Text Search".
Query tanpa masalah menghasilkan dua array kosong. Teksnya harus persis sama, termasuk huruf besar kecil.
estimateQueryCost(plan) menerima { rows, joins, indexes } dan mengembalikan skor biaya: mulai dari rows, kalikan 1.5 untuk setiap join (1.5 pangkat joins), lalu kalau indexes > 0 bagi 10sekali saja (berapa pun jumlah index-nya), dan bulatkan dengan Math.round.
Yang dicek:
analyzeQuery("SELECT * FROM users") mengembalikan { issues: ["SELECT * mengambil semua kolom"], suggestions: ["Pilih kolom spesifik yang dibutuhkan"] }
analyzeQuery("SELECT id, name FROM users") mengembalikan { issues: [], suggestions: [] }
analyzeQuery("SELECT * FROM products WHERE name LIKE '%laptop%'") mengembalikan { issues: ["SELECT * mengambil semua kolom", "LIKE dengan wildcard di awal"], suggestions: ["Pilih kolom spesifik yang dibutuhkan", "Gunakan Full Text Search"] }
Cek tersembunyi: { rows: 100, joins: 0, indexes: 0 } harus 100, dan { rows: 500, joins: 1, indexes: 2 } harus 75
Baris console.log di kode awal biarkan saja.
Hint
analyzeQuery cuma mencari potongan teks di string SQL dengan includes, lalu menambahkan teks ke dua array. estimateQueryCost hitungan biasa: kali 1,5 untuk tiap join, bagi 10 sekali kalau ada index, lalu bulatkan.
if (query.includes('SELECT *')) { issues.push(...); suggestions.push(...); } lalu if kedua yang sama untuk query.includes("LIKE '%"). Untuk biaya: const joinFactor = Math.pow(1.5, plan.joins); const divisor = plan.indexes > 0 ? 10 : 1;
issues.push('SELECT * mengambil semua kolom'); suggestions.push('Pilih kolom spesifik yang dibutuhkan'); lalu issues.push('LIKE dengan wildcard di awal'); suggestions.push('Gunakan Full Text Search'); dan return Math.round((plan.rows * Math.pow(1.5, plan.joins)) / (plan.indexes > 0 ? 10 : 1));
</>{ }.css=>#idfn()
Versi baru
HyperSheets
bagian dari BelajarWeb.dev
0%
Membuka gerbang…
HyperSheets
Memperbarui Aplikasi
Versi baru tersedia. Halaman akan dimuat ulang otomatis...