たとえば、私は 3 つのテーブルを持っています。最初は「ユーザー」のように、すべてのユーザーが自分の名前を保存していました。2 番目 - ユーザーのアドレスが格納される「場所」 - 通常、1 人のユーザーに対して 1 つのアドレス。そして 3 番目の「メッセージ」では、通常、すべてのユーザーが多数のレコードを持っています。
そして、これら3つのテーブルを結合するとき-のように
SELECT Users.name, Location.address, Messages.message FROM Users
LEFT JOIN Location ON Location.user_id = Users.id
LEFT JOIN Messages ON Messages.user_id = Users.id
WHERE blah blah
テーブル 'Messages' には各ユーザーの多くのレコードがあるため、結果には多くの重複レコードが含まれます。そして、これらの重複はフェッチを遅くします。そして、私は解決策を探しています。それを最適化する方法です。たとえば、私は - で試しGROUP_CONCAT()
ましGROUP BY User.id
たが、取得の結果GROUP_CONCAT()
が比較的長くなると、GROUP_CONCAT()
が返され始めNULL
ます。そして、私はそれをマスターすることはできません.私は設定group_concat_max_len
しmax_allowed_packet
て高い値にしようとしました-すべて運がありません.
さて、誰かがこれについて何か考えを持っていますか?
psおそらく重要な注意点として、私の実際のケースでは、「メッセージ」列が1つだけではなく、多くの列とそれらを含む多くの個別の行があることに注意してください。そして、「メッセージ」テーブルは「メッセージ」、「時間」、「受信者」、削除済み、「メディア」などのように見え、GROUP_CONCAT() にはこれらすべてのフィールドが含まれています。
UPD:GROUP_CONCAT()
レコードが 1 つだけの場合、すべての結果がドロップされるようNULL
です。たとえば、 を使用しGROUP_CONCAT(Messages.message, Messages.time)
、場合によっては 1 行の時間が になる場合NULL
、NULL が返されます。