0

時間、タグ、ユーザー、カテゴリの 4 つのテーブルを使用してクエリを実行しています。各テーブルには 400 を超えるレコードはありませんが、このクエリには 70 ミリ秒かかります。

何度も(400回)必要なので、全部で30秒くらいかかります。

SELECT COUNT(*) FROM times
INNER JOIN tags ON times.user_id = tags.tag_id
INNER JOIN users ON tags.user_nr = users.nr
INNER JOIN categories ON users.category_id = categories.id
WHERE (times.time_raw < "000560")
AND (times.time_raw != 0 )
AND (times.cell != 1 )
AND (categories.name="kategory_A")
AND (times.run_id="08")

どうすれば速くなりますか?

4

1 に答える 1

0

インデックスが解決策です!!

次のリストは、インデックスを作成する列を選択する際のガイドラインを示しています

•WHERE 句で頻繁に使用される列にインデックスを作成する必要があります。
•テーブルを結合するために頻繁に使用される列にインデックスを作成する必要があります。
• ORDER BY 句で頻繁に使用される列にインデックスを作成する必要があります。
•テーブル内で同じ値または一意の値がほとんどない列にインデックスを作成する必要があります。
• 小さなテーブル (少数のブロックのみを使用するテーブル) にはインデックスを作成しないでください。これは、完全なテーブル スキャンがインデックス付きクエリよりも高速になる可能性があるためです。
•可能であれば、最も適切な順序で行を並べる主キーを選択します。
•連結インデックスの 1 つの列だけが WHERE 句で頻繁に使用される場合は、その列を CREATE INDEX ステートメントの最初に配置します。
•連結インデックスの複数の列が WHERE 句で頻繁に使用される場合は、最も選択的な列を最初に CREATE INDEX ステートメントに配置します。

于 2012-05-02T13:52:12.030 に答える