Tampaknya diketahui bahwa untuk menemukan jawaban atas kueri atas database relasional D , kita perlu waktu | D | | Q | , dan seseorang tidak dapat menyingkirkan eksponen | Q | .
Karena bisa menjadi sangat besar, kami bertanya-tanya mengapa database bekerja sama sekali dalam praktiknya.
Apakah ini hanya masalah permintaan biasa yang tidak besar sama sekali dalam aplikasi dunia nyata? (Maka itu menarik untuk mengetahui apa ukuran pertanyaan yang biasa diajukan untuk sistem database relasional, dan apa ukuran "maksimal" dari pertanyaan yang diharapkan dapat dijawab secara efektif oleh sistem DB dalam praktiknya .)
Catatan tentang eksponen tidak `dilepas '
Untuk menunjukkan bahwa eksponen tidak dapat dilepas, seseorang dapat menggunakan kueri yang menanyakan apakah ada klik ukuran n dalam grafik yang diberikan oleh database. Untuk memeriksa apakah grafik memiliki n -clique adalah masalah NP-complete. Selain itu, ini tidak bisa diperbaiki dengan parameter tetap, dengan parameter n . Detail dapat ditemukan di, misalnya,
Libkin, L .: Elements Of Finite Model Theory. Springer (2004)
atau
Papadimitriou, CH, Yannakakis, M .: Tentang kompleksitas kueri basis data. J. Comput. Syst. Sci. 58 (3), 407–427 (1999)
sumber
SELECT * FROM users WHERE username="abc" AND passwrod="xyz"
) adalah pencarian sederhana, yang menjalankan O (| D |) untuk dijalankan. Jika ada indeks pada bidang basis data yang relevan, itu akan mengambil O (log | D |). Saya tidak ke dalam basis data, tapi saya tidak berpikir pertanyaan yang lebih rumit akan memakan waktu eksponensial.Jawaban:
Ada kelas besar pertanyaan yang "mudah", bahkan dalam kasus terburuk. Secara khusus, jika kelas kueri hanya berisi kueri konjungtif dan setiap kueri memiliki lebar terikat (misalnya treewidth, treewidth grafik insidensinya, lebar hiperree fraksional, atau lebar submodular) maka kueri dapat dijawab dengan menggunakan sesuatu seperti gabungan pohon , bersama dengan enumerasi brute force untuk bagian lokal dari kueri yang menyimpang dari pohon. Ini membutuhkan waktu polinomial, dengan derajat polinom ditentukan oleh parameter lebar.
Tampaknya banyak pertanyaan yang ditemui dalam praktik bersifat konjungtif dan memiliki lebar kecil. Jadi runtime polinomial memiliki tingkat rendah dalam hal ini.
Dániel Marx mempresentasikan makalah di STOC 2010 tentang lebar submodular baru-baru ini, versi lengkapnya mencakup ringkasan yang bagus tentang berbagai pengertian lebar dan bagaimana perumusan CSP berhubungan dengan formalisme basis data (versi konferensi tidak memiliki ini).
Ini bukan jawaban yang lengkap, karena tidak berurusan dengan kompleksitas "khas" dari query database, tetapi bahkan dengan analisis kasus terburuk ada pertanyaan mudah.
sumber
Orang dapat menggunakan kueri Q_n untuk memeriksa apakah grafik, direpresentasikan sebagai basis data, berisi klik dengan n elemen. Untuk memeriksa apakah grafik memiliki klik adalah masalah NP-complete. Selain itu, ini tidak bisa diperbaiki dengan parameter tetap, dengan parameter n (yang berarti D ^ n).
sumber
Cara lain untuk menjawab pertanyaan ini adalah, "mereka tidak!"
Jika Anda memberikan implementasi DBMS khas kueri berisi jumlah yang sangat besar bergabung, itu bahkan tidak akan membuatnya melewati fase perencanaan / optimasi (apalagi evaluasi), bahkan jika kueri asiklik atau memiliki struktur yang sangat sederhana seperti Andrá menyinggung hal di atas.
Tapi, untuk beban kerja DBMS "khas", pertanyaan seperti itu tampaknya tidak muncul.
sumber
Berikut adalah versi yang lebih memperhatikan realitas dari jawaban tigreen dari sudut pandang orang yang benar-benar menggunakan basis data (relasional) secara intensif: Inti dan kompleksitas aplikasi mereka adalah untuk menyusunnya dengan cara yang mereka perlukan dalam jumlah yang sedikit. bergabung untuk setiap permintaan yang pernah dibutuhkan sebanyak mungkin dan itulah sebabnya mereka benar-benar Berfungsi . Dengan kata lain, jangan berharap basis data untuk menyelesaikan masalah rumit bagi Anda sendiri - mereka tidak akan, tetapi jika digunakan dengan bijak mereka adalah instrumen yang sangat berguna dan dapat diterapkan.
sumber
Bergabung hanya kuadratik dari hubungan banyak ke banyak. Ini relatif jarang: dalam praktiknya, sebagian besar hubungan dan gabungan adalah 1-ke-banyak, sehingga mereka akan membutuhkan waktu linier jika indeks / kunci didefinisikan. Pertanyaan dengan beberapa banyak-ke-banyak bergabung adalah masalah serius.
sumber