2016-04-30 18 views
0

私はオンラインのデータベースコースに従っています。私はこの質問を受け取りました。作成するインデックスは何ですか?

USER、CHECKIN、PLACEの各テーブルがあるとします。

USER(uid、uname、ucity)、uidは主キーです。

PLACE(pid、pname、pxcoord、pycoord、pcity)、pidはプライマリキーです。

CHECKIN(uid、pid、cdate、ctime)、(uid、cdate、ctime)は主キーです。

select c.uid, c.pid c.cdate 
from user u join checkin c join place p 
where ucity='NewYork' and pcity='Chicago' 

のみ2つの索引構造まで作成することができ

クエリがされ、最良の選択とその理由は何ですか?

+0

がどのように見える参加しますので、また、右uid後、pidを含むようにCHECKINテーブルの主キーを変更無効なクエリです。なぜ無条件結合が必要なのでしょうか? – Basilevs

+0

@Basilevs - クエリはMySQLで有効です。それは単に意図したことをしないかもしれません。 http://stackoverflow.com/questions/16470942/can-i-use-mysql-join-without-on-condition –

+0

これは私の言いたいことです。都市、訪問者、ユーザーのデカルト積? – Basilevs

答えて

3

正確には、ucityにインデックスを作成し、pcityにインデックスを作成します。

また、最大2つのインデックスを作成することが許可されている場合は、1つのインデックスを変更することもできます。その場合は、おそらく近い将来にあなたが内部でcross joinからこのクエリを変換または左

+0

uidとpidでインデックスを作成しない理由について説明してください。 – Vicky

+1

これらはこのクエリのキーを結合していません。このクエリは、あなたがJOINs –

+0

OKでon節を持たないため、クロス結合クエリ(これらの3つのテーブルのすべての行の間のデカルト積)であるため、自然結合の場合はまず結合キーのインデックスを考慮する必要がありますwhere句のキー? – Vicky