2017-01-26 4 views
0

メモリサイズを使い切ってしまいました。問題の原因となったクエリが見つかりました。 orderdetとprodtextsPHPは2つのテーブルを結合するメモリサイズを許可します

Orderdetは受注9K行の詳細が含まれており、500行をprodtexts -

は、私は2つのテーブルを結合しました。

私はsqlを介してクエリを実行すると、結果が得られますが、主キーが設定されていないことに注意してください。 1つのプライマリインデックス列を含む必要な列だけを選択するようにクエリを更新したとき、結果はOKでした。何が問題を引き起こす可能性がありますか?必要な列を含むクエリを手動で記述する必要がありますか?今私はSELECT *を使用しています。

+1

あなたは十分な詳細を提供していませんが、頭に浮かぶものは1つです。メモリの問題が原因でクエリが実行されているか、結果に対して実行されている作業が原因であると確信していますか?ひどく書かれたJOINは結果の乗算を引き起こす可能性があります。いくつかはばかばかしい結果をフィルタリングするPHPコードを追加します – user3802077

+0

ちょうどそれについて考えましたresultscwere良いナットそれぞれの製品の説明が含まれて - HTMLの多くは私はちょうど列necesseryを選択し、 –

答えて

0

メモリ制限を超えた場合、今後メモリの容量を増やしても同じ問題が発生します。

memory_limitを見つけるphp.iniのファイルでメモリ制限

を変更して、適切な値(例えばmemory_limit = 250G)に変更します。

やPHPスクリプト側から:ini_set('memory_limit', '250MG');


常にあなたのクエリを最適化。必要なものだけを取り出し、可能な限り結果のサイズを縮小してください。

ヒント:

SELECT id, name代わりの

SELECT [..] FROM a JOIN b ON a.id = b.a_id代わりのSELECT [..] FROM a, b/SELECT [..] FROM a LEFT JOIN b ON a.id = b.a_idSELECT *

SELECT [..] FROM a, b(あなたの場合)9000 * 500 = 4500000行が選択されます。

WHERE .. AND ..を忘れずに使用してください。できるだけLIMITを使用してください。

関連する問題