Mysql
 sql >> Teknologi Basis Data >  >> RDS >> Mysql

Alasan untuk tidak menggunakan GROUP_CONCAT?

  • Menggunakan GROUP_CONCAT() biasanya memanggil logika group-by dan membuat tabel sementara, yang biasanya negatif besar untuk kinerja. Terkadang Anda dapat menambahkan indeks yang tepat untuk menghindari tabel temp dalam kueri kelompok demi kelompok, tetapi tidak dalam setiap kasus.

  • Seperti yang ditunjukkan @MarcB, batas panjang default string gabungan grup cukup pendek, dan banyak orang bingung dengan daftar terpotong. Anda dapat meningkatkan batas dengan group_concat_max_len .

  • Meledak string ke dalam array di PHP tidak gratis. Hanya karena Anda dapat melakukannya dalam satu panggilan fungsi di PHP tidak berarti itu yang terbaik untuk kinerja. Saya belum membandingkan perbedaannya, tetapi saya ragu Anda juga memilikinya.

  • GROUP_CONCAT() adalah MySQLisme. Itu tidak didukung secara luas oleh produk SQL lainnya. Dalam beberapa kasus (misalnya SQLite), mereka memiliki fungsi GROUP_CONCAT(), tetapi tidak bekerja persis sama seperti di MySQL, jadi ini dapat menyebabkan bug yang membingungkan jika Anda harus mendukung beberapa back-end RDBMS. Tentu saja, jika Anda tidak perlu khawatir tentang porting, ini bukan masalah.

  • Jika Anda ingin mengambil beberapa kolom dari currencies tabel, maka Anda memerlukan beberapa ekspresi GROUP_CONCAT(). Apakah daftar dijamin dalam urutan yang sama? Artinya, apakah bidang ketiga dalam satu daftar sesuai dengan bidang ketiga dalam daftar berikutnya? Jawabannya adalah tidak -- tidak, kecuali Anda menentukan pesanan dengan ORDER BY klausa di dalam GROUP_CONCAT().

Saya biasanya menyukai format kode pertama Anda, menggunakan kumpulan hasil konvensional, dan mengulang hasil, menyimpan ke array baru yang diindeks oleh id klien, menambahkan mata uang ke array. Ini adalah solusi langsung, membuat SQL tetap sederhana dan lebih mudah untuk dioptimalkan, dan berfungsi lebih baik jika Anda memiliki banyak kolom untuk diambil.

Saya tidak mencoba mengatakan GROUP_CONCAT() buruk! Ini sangat berguna dalam banyak kasus. Tetapi mencoba membuat aturan satu ukuran untuk semua untuk menggunakan (atau menghindari) fungsi atau fitur bahasa apa pun adalah hal yang sederhana.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Bahasa arab di php/mysql muncul ???? tanda tanya di html

  2. Apakah ukuran tabel memengaruhi kinerja INSERT?

  3. Memeriksa apakah mysql_query mengembalikan sesuatu atau tidak

  4. Pilih baris terpisah dari dua tabel, pesan berdasarkan tanggal

  5. Menu Arsip Blog MYSQL PHP berdasarkan Tahun dan Bulan