0
select marksymbol,round(avg(p.closerate * p.out_share),2)
from price p
where trandate >= '2000/06/05' and trandate <= '2012/06/22' and p.markcode='RD'
group by marksymbol

2 GB RAM のローカル マシンでは 0.064 秒、サーバーでは 1 分 30.38 秒かかりました。

ローカル マシンで Windows を実行しています。サーバーは Linux で MySQL を実行します。

データベース スキームは両方のマシンで同じです。インデックスと主キーは同じです。

このクエリのパフォーマンスに影響を与える可能性のある他の要因は何ですか?

4

1 に答える 1

3

それらは正しく索引付けされていますが、同じサイズですか? Linux サーバーのテーブルは、テスト中の Windows サーバーのテーブルよりもかなり大きいですか?

問題を解決するのに役立ついくつかの場所を探すことができます。

1 : クエリ自体に対して、mysql に何が起こっているかを知らせるために EXPLAIN します。

http://dev.mysql.com/doc/refman/5.0/en/explain.html

phpmyadmin がインストールされている場合は、[説明] をクリックするだけで (きれいな円グラフで) 自動的に実行され、その方法でボトルネックを特定できます。

2 : サーバーのメモリ使用量。コマンドを使用する

フリー -m

vmstat

利用可能なメモリの量を確認します。あなたのシステムは、あなたのクエリのために高価なスワッピングを行っていた可能性があります。

3: クエリ自体を最適化します。見た目から、日付検索に文字列比較を使用しています。mysql の強力な Datetime 機能を利用して、日付の比較を高速化できます。ただし、これがボトルネックであるとは思えないため、最初に上位 2 つのオプションを確認してください。

于 2012-06-25T13:30:30.337 に答える