2011-02-04 21 views
0

すべてのSQLクエリが既に書き込まれているプロジェクトがあります。それらのほとんどは改善することができ、私はそれをしたい。MySQLでパフォーマンスを向上させるSQLクエリを書き換える方法

しかし、私は両方のクエリをチェックして分析することができます[あらかじめ書かれていて、別の方法で同じクエリを書きます]。

私はそれらを書き直すと、私は正しいかどうか、古いクエリが私よりも良いかどうかを確認することができますクエリを分析したい。

MysqlベースのRDBMS用のクエリアナライザツールが必要です。

[間違いが行くならば、それを編集]

+4

特定のクエリを念頭に置いていますか?これは非常に幅広いテーマに取り組んでいます。 – alex

+1

mysqlで "EXPLAIN "を使うことをお勧めします。クエリを最適化する方法はわかりませんが、クエリの最適化に使用できるクエリに関する有益な情報が表示されます。 –

+0

開始するための基本的なチュートリアルはこちらを参照してください:http://www.learn-mysql-tutorial.com/OptimizeQueries.cfm – Piskvor

答えて

0

MySQLにはEXPLAINというステートメントがあります。このステートメントは、エンジンの実行パスを示します。あなたは作るために変更するかを決定するためにそれを使用することができます。

EXPLAIN SELECT foo,bar from glurch WHERE baz > 1 ORDER BY foo; 

参照:http://dev.mysql.com/doc/refman/5.0/en/explain-output.html

は、テーブルの行は、クエリのその部分を実行するために検討する必要がありますどのように多くを示しrowsカラムに特別な注意を払ってくださいさらに重要なのは、クエリがどのように実行されるかを示すExtraの列です。

たとえば、Extra列の「一時的な使用」が表示されている場合、通常、クエリ結果を一時テーブル(ディスク上にある可能性があります)に書き込んで並べ替え、それらを読んでください(少なくとも、そのうち一部は)。

適切なインデックスを指定することで、一時テーブルなどの不快なパフォーマンスの低下を避けることができます。そして、だけではなく、インデックスではなく、正しいインデックスです。列を索引付けしただけであっても、索引を問合せで使用できるわけではありません。

0

あなたが良いRDMBSエンジンを持っている場合は、クエリパーサーは関係なく、それが書かれているか、あなたのクエリのための最もパフォーマンスの実行計画を決定するべきではありません。
つまり、from句とjoin句のテーブルの順序、またはフィルタ条件の順序は重要ではありません。

最初に行うことは、実行計画を見て分析することです。索引を追加するか、索引を変更するかなどを確認してください。

あなたの質問は少し曖昧です。リファクタリングするクエリのサンプルを提供できますか?

+1

"should"の強調;また、データベースを適切に構造化する必要があります。オプティマイザは、索引なしで表を最適化するためにすべてを試行できますが、問合せは遅くなります。 – Piskvor

+0

多くの人が「良いRDMBSエンジン」と「MySQL」は矛盾していると主張します。確かに、そのクエリオプティマイザは、他のデータベースと同様に複雑なクエリを最適化するために同じ労力をかけません。 (それは、そのオプティマイザが遅くないということです。これは、多くのクエリを準備する場合に重要です。) – btilly

+1

@Piskvor:確かに、パフォーマンスの良いデータベースは良いDBデザインで始まります(正規化されているように) –