-
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 denganORDER 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.