未分類TweetTweetSQLのJOINについて考える「JOINは使わない方が良い」というのを小耳に挟んで「なぜだろう」と思っていたのですが、ひとつの理由が分かったのでそれを記しておきます。SQLのJOINについて考えるべく、Twitterみたいな掲示板システムを考えてみます。自分がフォローしているユーザーのコメントをすべて取得するような状況です。friendテーブルまず、友達の一覧を保持するテーブルfriendが必要です。自分のIDと友達のIDを保持しておきます。int);commentテーブル次に投稿を保持するテーブルcommentが必要です。発言者のIDと、コメントの本文が必要です。text);JOINを使って友人のコメントを取得する非常に基本的なSQLで書くことができます。自分のIDが1なら、次のようなSQL文になります。1;JOINを使わないで友人のコメントを取得する友人のIDの一覧を取得するJOINを使わないので、SQLを分割する必要があります。自分のIDを元に友人のID一覧を取得します。1;友人のIDを元にコメントの一覧を取得するつづいて、取得したidをPHPなどで整形して、コメント取得のSQLに投げ込みます。友人が4人いて、友人のIDが2,3,4,5と取得できた場合は次のようなSQLになります。(2,3,4,5);どちらのSQLが優れているか?この比較は難しいかもしれませんが、ひとつの判断の観点として、システムの規模があげられると思います。JOINを使った方が楽この説明を見ても分かる通り、JOINを使ってしまった方が、明らかに楽です。使えるものなら、JOINを使いたいところです。大規模システムでは、JOINが使えない?大規模なシステムでは、複数のテーブルをひとつのデータベースにまとめて置いておくのは効率が悪い場合があります。データベースのサイズが大きくなると、すべてのデータがメモリに乗り切らずに、HDDへのアクセスが増加し速度が極端に低下するためです。そこで、friendテーブルとcommentテーブルを別々のデータベースサーバに置くようにして解決する方法があります。(パーティショニングと言います。)しかし、この状態では2つのテーブルが別のサーバにあってJOINが使えないので、「JOINを使わないで友人のコメントを取得する」方法が採用されます。まとめ以上をまとめると、こうなります。テーブルを複数のサーバに分散させて置く場合は、JOINしない。すべてのテーブルがひとつのデータベースサーバに置かれているような小規模で簡単なシステムでは、JOINすればいい。エンジニアリング半分で頑張っています。広告業界と無関係な僕がさっぱり理解できないアドテク用語を調べた。2014年3月30日WEBアクセス解析ツールMixpanelが簡単なのに凄い。