2012-02-01 15 views
1

私の質問は、このデータベースの実装をうまく管理する方法があります。user_nameを取得する効率的な方法

背景:

Webページは、MySQL、PHPとJavaScriptで働いていました。 (議論のために簡略化)以下の表を想定し

* user_table *

user_id (PK) 
user_name 

* thread_table *

thread_id (PK) 
user_id (Index) 
thread_title 

私は、スレッドのタイトルのリストを表示したいですそれらをパブリッシュするユーザーと一緒に。

だからこれは私のいつものクエリのようになります。

SELECT thread_title, thread_table.user_id, user_name 
FROM thread_table INNER JOIN user_table 
WHERE user_table.user_id = thread_table.user_id 

私の質問は、はUSER_IDを持つUSER_NAMEを取得するための最も効率的な方法(速く)これでしょうか?

これは単純な例ですが、私はより複雑なクエリを持っていて、異なるテーブルに参加していて、user_nameを取得するためにのみ別のテーブルに参加する必要があります。

この実行の有効性を改善するにはどうすればよいですか?少なくともuser_idを持つuser_nameを得るために、ハッシュ・キーを使用してuser_tableのメモリー表を作成する必要がありますか?

ありがとうございます!

答えて

0

これは正しい実装です。 JOINがあなたに苦労している場合は、間違ったツールを使用しています! JOINはSQLの本質的な部分であり、特定の情報を取得するためにJOINを使用する必要があるという事実が、スキーマを変更する必要はありません。

これが他のクエリで何度も繰り返し使用する共通のパターンであれば、それはビューの完璧な候補です。次に、他のクエリでそのビューを使用して、型を取り除くことができます。

パフォーマンスが本当に問題になる場合は、デモラライゼーションを調べ始めることができますが、ここでその段階にいるという感覚は得られません。クエリ時間と出力をEXPLAIN PLANとして送信すると、これをさらに診断するのに役立ちます。

+0

クエリが遅くなっていると感じる場合は、 'thread_table.user_id'にインデックスを追加してください –