こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

解決済みの質問

MySQLのテーブル連結でクエリに4分以上かかる

初めまして、よろしくお願いします。

現在PHPよりアクセスするクエリを作成しています。
mysql> select distinct titles.culumn1, title from articles, titles where user = 'userid' and articles.culumn1 = titles.culumn1 and datetime like '2007-11-18%';
Empty set (4 min 42.79 sec)
上記のようなSQL文を作ってPHPからとCLIのmysqlから実行してみたところ、どちらも結果が出るまでに4分以上かかってしまいます。

テーブル内のレコード数としては以下のようになっています。
mysql> select count(*) from articles;
+----------+
| count(*) |
+----------+
| 738338 |
+----------+
1 row in set (0.00 sec)

mysql> select count(*) from titles;
+----------+
| count(*) |
+----------+
| 34821 |
+----------+
1 row in set (0.00 sec)

できればこのクエリの時間を4分から3秒程度にまで短縮したいと考えています。
これは、やはりハードウェアの性能限界なのでしょうか?
またはテーブルの連結をせずに一つのテーブルにまとめてしまった方がいいのでしょうか?

どなたかヒントでも頂ければ幸いです。
ぜひ、よろしくお願い致します。

投稿日時 - 2007-11-19 06:59:50

QNo.3529788

困ってます

質問者が選んだベストアンサー

EXPLAINで構文チェックしてみてください。
おそらくインデックスが働いていないのでしょう。
(1)articlesテーブルとtitlesテーブルのculumn1、
title、datetimeにそれぞれインデックスを設定する。
(プライマリならそれでもよい)
(2)datetimeにlikeではインデックスはきいてません。
`datetime` BETWEEN '2007-11-18' AND '2007-11-19'
としてください。

投稿日時 - 2007-11-19 09:41:39

お礼

早速のご回答ありがとうございます。

articlesテーブルとtitlesテーブルのculumn1に部分インデックスを追加して同じクエリを実行したところ、1秒強で結果が返ってくるようになりました!^^
他のアドバイスについても今後、必要に応じて使っていきたいと思います。

的確なアドバイスを、本当にありがとうございました。非常に助かりました。

投稿日時 - 2007-11-19 17:36:33

ANo.1

このQ&Aは役に立ちましたか?

1人が「このQ&Aが役に立った」と投票しています

回答(1)

あなたにオススメの質問