2012-03-21 13 views
1

私は各テーブルに約40万レコードの以下のクエリを使用しています。結果を出すのに約10〜12秒かかります。私はそれをより速くする方法はありますか?クエリを高速にする方法

問合せ:

select url_details.title, url_details.summary, url_details.id from urls, 
url_details where urls.status='' AND urls.keyword_id='2791' AND 
url_details.url_id=urls.id 
+0

あなたのテーブル作成ステートメントを投稿してください! (使用するエンジンと使用するキーの種類を確認する) – silly

答えて

0

ほとんどすべてのmysqlパフォーマンスの問題に対する答えはインデックスです。 すべてのクエリに対してこれら3つの変数をフィルタリングすることがわかっている場合は、これらの3つのフィールドにまたがる複雑なインデックスを追加します。あなたはインデックスが時にフィルタリングされます見当がつかないする場合は

http://dev.mysql.com/doc/refman/5.0/en/multiple-column-indexes.html

は、その後、各フィールドの単純なインデックスを追加し、MySQLの「インデックスマージ」の最適化に依存しています。

http://dev.mysql.com/doc/refman/5.0/en/index-merge-optimization.html

+0

ありがとうございました。以前のクエリでは約8〜12秒かかりましたが、0.00秒になっていませんでした。ありがとうございます:) – Prashant

+0

@Prashant:私はあなたの問題を正確に解決したものに興味があります。 – bukzor

+0

インデックスタイトルとサマリーを追加すると作業が完了しました – Prashant

1

は普段compare..Thatは時間を短縮しますキーのインデックスを作成大幅

0

まずあなたが

のURL(あなたのテーブルのキーを定義する必要がありますステータスとkeyword_idのインデックスを定義するためのhabe):

ALTER TABLE `urls` ADD INDEX `index_keyword_status`(`keyword_id`, `status`); 

と外部キーまたはインデックス

あなたの選択である必要はありurls_details.url_id:

SELECT 
url_details.title, 
url_details.summary, 
url_details.id 
FROM urls 
INNER JOIN url_details 
    ON url_details.url_id=urls.id 
WHERE urls.keyword_id = 279 
    AND LENGTH(urls.status) = 0 
+0

length()を= ''より速く使用していますか?あなたがヌルを持っているなら、何が起こるのですか?同じ? – haltabush

+0

@haltabushの長さは高速ではありませんが、ヌル値 – silly

+0

を処理します。 "(urls.status IS NULL)または(urls.status = '')はより速くなるはずです... – user1027167

0

まず、あなたはより良い結合構文を使用する必要があります。

select url_details.title, url_details.summary, url_details.id from urls join urls_details using(url_id) where urls.status='' AND urls.keyword_id='2791' 

あなたはまた、サムスを持っている必要がありますurls.statusのインデックス、url_idとkeyword_idの両方。 各テーブルに4 000 000レコードがある場合でも、それはまだ少し遅くなるでしょう。

0

だけでなく、指数はすべての問題を解決します作成。 テーブル構造を最適化し、冗長なインデックスがある場合は削除することができます。 私はSQLyogを使用しています。クエリプロファイラーを使用しています。これにより、クエリの実行方法、クエリ実行のステップバイステップのアプローチ(典型的なレイアウトはこのようになります)、さらには「最適なデータタイプの計算」あなたのテーブル構造を最適化することができる '冗長なインデックスを見つける'、私はこのツールがあなたを助けてくれることを願っています。 enter image description here

関連する問題