2016-12-04 8 views
0

は誰でもデータベースは40,000のニュースを持っているだけで、フィールドの物語」は、大 「古い」である数値であるエラー:MySQLクライアントは

...このエラーで私に助言してくださいすることができ、メモリを使い果たしました0または1、 'title'と 'shortstory'は非常に短いかNULLです。

何かアドバイスは大歓迎しました。これは、検索データベースクエリを実行した結果です。

Error: MySQL client ran out of memory 
Statement: SELECT news30_access.usehtml, old, title, story, shortstory, news30_access.name AS accessname, news30_users.user AS authorname, timestamp, news30_story.id AS newsid FROM news30_story LEFT JOIN news30_users ON news30_story.author = news30_users.uid LEFT JOIN news30_access ON news30_users.uid = news30_access.uid WHERE title LIKE ? OR story LIKE ? OR shortstory LIKE ? OR news30_users.user LIKE ? ORDER BY timestamp DESC 
+0

'SELECT'節で' story'を返さないでください。 –

+0

@ GordonLinoffが正しいです。クエリの結果を格納するのに十分なメモリがサーバーにないため、サーバーのメモリ容量を増やしても問題の原因は解決されません。 'LIMIT'を使って取り出されるデータの量を制限するべきです。例: 'LIMIT 100'、その後のクエリでは' OFFSET'を使って次の100の結果を得ることができます。例: 'LIMIT 100 OFFSET 100' – DrewT

答えて

1

簡単な答えは:SELECT句でstoryを使用しないでください。

あなたが話をしたい場合は、返される結果の数を制限します。たとえば、10030の結果から、

limit 100 

をクエリの最後に追加します。これは最新の100件のストーリーを取得します。

likestoryと他の文字列も使用しています。フルテキストインデックスのあるmatchを使用したいと思うかもしれません。これはあなたの直面する問題(クライアントにあまりにも多くのデータを返す)を解決するものではありません。しかし、クエリがより速く実行されます。

documentationで始まり、フルテキスト検索を学びます。

+0

人。欠席して申し訳ありません。私はスクリプトから「ストーリー」を削除しましたが、空白の画面しか返されませんでした。 [私はタイトルを検索するだけで十分幸せだろう!! ]ところで、これは信じられないほどゆっくりと走ったので、他の何かを推測するのは間違っていなければなりません... – alankeys

関連する問題