it-swarm-id.com

Mengingat db_select jauh lebih lambat daripada db_query, mengapa saya ingin menggunakannya?

Untuk latar belakang tentang ini, silakan lihat http://drupal.org/node/1067802 .

Mengingat semua itu, situasi apa yang ada di mana saya mungkin ingin menggunakan db_select (), atau haruskah saya hanya mengandalkan db_query?

69
Chris Cohen

Ada 5 alasan untuk menggunakan SelectQuery

  • Anda membangun kueri dinamis dengan beragam kondisi, gabungan, bidang, dan sebagainya. Lihat field_read_fields () untuk contoh.

  • Anda ingin menggunakan yang disebut Extenders . Extender contoh adalah PagerDefault (menggantikan pager_query () ) dan TableSort (menggantikan tablesort_sql () ). Ini memungkinkan untuk menambahkan fungsionalitas tambahan ke SelectQuery. Lihat juga Bagaimana Anda membuat tabel sortir dengan pager dengan data dari tabel kustom? . Contoh: node_page_default () .

  • Anda ingin mengizinkan modul lain untuk mengubah kueri Anda. Kemudian Anda dapat menambahkan apa yang disebut tag dan SelectQuery akan secara otomatis memanggil pengait alter yang sesuai untuk tag itu. Saya sangat mengandalkan ini dengan modul Privatemsg saya (Kami sudah melakukannya di D6 dengan pembuat kueri kustom).

  • Jika Anda ingin/perlu menggunakan sistem node_access untuk hanya menampilkan node, pengguna diizinkan untuk melihatnya. Cukup tambahkan tag 'node_access' ke $ query Anda. Ini menggantikan db_rewrite_sql ().

  • SelectQuery memiliki beberapa fitur yang membantu membuat kode Anda berfungsi sama di semua basis data yang didukung. Misalnya ada SelectQuery :: orderRandom () . Dan jika Anda memiliki kondisi LIKE, -> condition ('field', $ value, 'LIKE') akan memastikan bahwa itu selalu merupakan perbandingan kasus yang tidak sensitif. Di D6, Anda harus menggunakan RENDAH () untuk apa yang jauh lebih lambat. Tapi AFAIK, tidak ada lebih dari dua ini sekarang.

Jika tidak ada alasan ini berlaku untuk kasus tertentu, gunakan db_query ().

88
Berdir

Saya selalu menggunakan db_select karena saya lebih suka keterbacaan, pemeliharaan dan kompatibilitas lintas basis data dibandingkan keuntungan kinerja kecil. Selain itu, saya pikir angka-angka yang diberikan dalam masalah tersebut memberikan citra yang salah dari keseluruhan kinerja. Kita berbicara perbedaan 300 mikrodetik pada kueri yang, ketika mengembalikan lebih dari satu kolom, sering berjalan dalam rentang milidetik. Dan saya tidak akan terkejut jika hanya ada satu kali overhead (pemuatan kelas) dan dengan demikian perbedaan untuk permintaan (halaman) penuh jauh lebih sedikit.

9
fietserwin

The dokumentasi tentang db_query() mengatakan:

Gunakan fungsi ini untuk kueri SELECT jika itu hanya string kueri sederhana. Jika pemanggil atau modul lain perlu mengubah kueri, gunakan db_select () sebagai gantinya.

9
marcvangend