2011-04-20 64 views
4

約有1千萬條記錄。 分頁系統需要查詢。如何加快分頁所需的MySQL查詢 - 表中的百萬條記錄

查詢看起來是這樣的:

SELECT field1, field2, field3 FROM table 
WHERE field4 = '$value' 
ORDER BY field5 ASC limit $offset, 30; 

有關於字段4和字段5索引。

所有字段都是varchar類型。 Field5被測試爲int,但沒有真正的改進通知。

現在用limit 0, 30查詢需要大約1秒,但用limit 119970, 30查詢需要大約20秒。

這對於在分頁頁面上獲得小於0.1秒的結果是否現實?網站需要這樣的加載時間才能提供良好的用戶體驗。

詳解(與limit 0,30選擇)

id: 1 
select_type: SIMPLE 
table: table 
type: index 
possible_keys: NULL 
key: field5 
key_len: 768 
ref: NULL 
rows: 223636 
Extra: Using where 
+1

'$ value'多久改變一次?你能緩存查詢的結果嗎?你真的希望用戶獲得第12萬個結果嗎? – 2011-04-20 01:19:46

+4

顯示錶模式並解釋查詢。 – zerkms 2011-04-20 01:19:50

+0

@Mark艾略特值多次改變有大約2000個不同的值。有很多類似的查詢,所以MySQL緩存是有限的,並且希望第一次加載也很快。是的,我希望用戶可以分頁,因爲甚至有鏈接到最後的分頁頁面,機器人將掃描所有網站。現在甚至第一頁加載5秒。 – Newbie1 2011-04-20 01:27:57

回答

0

我有一個建議,就是數據不應該完全當用戶點擊它加載到分頁,而不是直接再次使用AJAX查詢不同的頁面。所以在確切的頁面上它只顯示當前頁碼數據。希望它有幫助,祝你好運。

+0

Ajax無法使用,因爲分頁的頁面不會被搜索引擎機器人抓取。 – Newbie1 2011-04-20 01:35:32

+0

這完全沒有幫助。這將完全導致查詢OP發佈。 – 2011-04-20 01:35:39

+0

@ Newbie1:我知道我遲到了這篇文章,但我個人非常同意Eric T對此的看法。用ajax加載分頁實際上是許多網站的常見做法。搜索引擎機器人仍然可以抓取這些網站,因爲您只需要爲您的網址提供?page = ...。然而,該網站將加載更快,直到用戶滾動到底部,您可以加載分頁,所以用戶不會注意到任何東西... – Chris 2012-04-26 21:33:10

1

根據您的數據變化的程度,您可以使用memcached來減少特定查詢運行的次數,並減少大多數用戶的響應時間。

+0

你也可以分析用法,看看哪些頁面實際加載。也許只有前100個被查看。緩存這些頁面,不要打擾其他頁面。 (當然,由於性能原因,現在可能不會查看前兩三頁以外的頁面)。 – Marvo 2011-04-20 01:37:25

+0

所有頁面必須加載速度較快,因爲漫遊器將掃描所有網站(它全部可以抓取),並且加載時間現在是重要因素。 – Newbie1 2011-04-20 01:39:45

+0

如果您的數據和分頁保持相對靜態,我會建議設置memcached。它通過使用重複查詢的sties提高了性能。 – afuzzyllama 2011-04-20 01:45:26

0

這張桌子有PK嗎? Select field1,field2,field3 from table as a join (select PK from table WHERE field4 = '$value' ORDER BY field5 ASC limit $offset, 30) as b on a.PK=b.PK;

+0

是的,id是主鍵,你的查詢命題沒有加速。 – Newbie1 2011-04-20 01:55:28

0

您是否考慮製作另一個表(表6),它是table4的索引散列?搜索數字而不是文本會快得多,所以查詢類似於:

SELECT field1,field2,field3強制索引(表6)從表 WHERE字段6 ='$ hashvalue'AND field4 ='$值' ORDER BY field5 ASC限制$ offset,30;

應該有助於消除數據的99.99%,它具有文本搜索和不管抵消應加快您的查詢之前....

+0

請問你能解釋一下嗎(表(表6)是table4的索引散列)。什麼是字段6和'$ hashvalue'? – Newbie1 2011-04-20 02:24:40

相關問題