2011-12-07 8 views
-1

私はダウンロードしたプログラムを使用していますが、すべての詳細がありません。これはユーザ入力を受け取り、mysqlデータベースに問い合わせるWebアプリケーション(Python CGI)です。私が知っていることは、レコードセットを100個の結果(アプリケーション設定内)に制限すると、結果は2秒以内に返されるということです。しかし、私が限界をわずかに120に上げると、処理に1.5分以上かかります!私はいくつかの異なるクエリで試してみたが、すべてこの問題に苦しんでいる。これは心配です。クエリの実装方法を正確に把握していないと、この問題を緩和する可能性がある一般的なmysql設定がありますか?mysqlはレコードを20%以上返すのに50倍以上時間がかかるのですが、なぜですか?

UPDATEは、より多くのテストの後、私は107は、このパフォーマンスの問題が発生するマジックナンバーであることがわかりました。 107レコード未満のものは即座に返されますが、107以上のものは少なくとも1.5分かかります。

+1

説明を提示してください。 –

+0

すべてのモジュールを掘り下げて(何日もかかるかもしれない)クエリを見つける前に、私はちょうど助けるかもしれないいくつかの一般的なmysql設定がある場合のために、この質問をそこに置くことを望んでいた – PJx

+0

50と150の結果はどうなりますか? DBに費やされた時間は?あなたがDBで直接照会するとどうなりますか?私はちょうどあなたが何らかの種類の指数関数的な地獄にあなたを連れて来るここでCGIスクリプト内のいくつかの奇妙な悪い論理を仮定することができます。 – alvi

答えて

3

クエリには指数的実行時間をもたらす何らかの種類のロジックが含まれている可能性があります。例えば

、私は場所のリストを持っていたし、それらの間の距離を計算する場合:何の最適化

を使用していない、4行については

1 => 2 
2 => 1 

:何の最適化を使用していない、2行の場合

1 => 2 
1 => 3 
1 => 4 
2 => 1 
2 => 3 
2 => 4 
3 => 1 
3 => 2 
3 => 4 
4 => 1 
4 => 2 
4 => 3 

データセットを倍増させるだけでは、実行時間が2倍になるわけではありません。

これを問題までスケールしてください。パフォーマンスが低下することがあります。クエリを見ることなく、私たちはあなたをさらに助けることができません。

関連する問題