2016-12-04 119 views
0

誰能請告訴我關於這個錯誤...錯誤:MySQL客戶端內存耗盡

數據庫有40000個新聞故事,但只有場「故事」是大的, 「老」是一個數值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

@戈登林諾是正確的。服務器上沒有足夠的內存來存儲查詢的結果,增加服務器的內存容量並不能解決問題的原因。你應該限制使用'LIMIT'獲取的數據量。例如:'LIMIT 100',然後在隨後的查詢中,您可以使用'OFFSET'來獲得接下來的100個結果,依此類推。例如:'LIMIT 100 OFFSET 100' – DrewT

回答

1

簡單的答案是:不要在SELECT子句中使用story

如果你想要的故事,然後限制返回結果的數量。以100個結果開始,加上:

limit 100 

到查詢結束。這將獲得100個最近的故事。

我還注意到,您正在使用likestory以及其他字符串列。您可能想要使用帶有全文索引的match。這並不能解決您的直接問題(這會將太多的數據返回給客戶端)。但是,它會讓你的查詢運行得更快。

要了解全文搜索,請從documentation開始。

+0

guys。抱歉缺席。我從腳本中刪除了「故事」,但只返回了一個空白屏幕。 [我會很高興剛剛搜索標題! ],即使這跑得非常慢,所以即時猜測別的東西肯定是錯的...... – alankeys