2013-02-08 106 views
0

我正在運行一個select * from table order by date desc查詢使用PHP的MySQL數據庫服務器,其中表有很多記錄,這減慢了響應時間。加快來自數據庫查詢的響應

那麼,有什麼方法可以加快響應。如果索引是答案,那麼所有列都應該創建索引。

+1

使用'limit'在您的查詢及分頁記錄。 – Rikesh 2013-02-08 12:20:41

+1

你需要每一列嗎? – DaveHogan 2013-02-08 12:21:04

+0

不是那麼容易:http://dev.mysql.com/doc/refman/5.0/en/optimization.html – 2013-02-08 12:21:28

回答

0

當你有一個WHERE子句時,索引加速搜索,或者對你有索引的字段進行JOIN。在你的情況下,你不這樣做:你選擇表中的所有條目。所以使用索引不會幫助你。

你確定你需要該表中的所有數據嗎?當您稍後使用PHP過濾,搜索或聚合這些數據時,您應該研究如何在SQL中執行此操作,以便數據庫向PHP發送較少的數據。

+0

感謝您的回答。是的,我需要所有數據導致它在移動應用程序中使用,我現在不能更改應用程序代碼,只有後端。移動應用程序編碼爲一次獲取​​所有數據。 – user11085 2013-02-08 12:27:47

+0

是否有可能以不同的方式存儲數據? – Philipp 2013-02-08 12:30:32

+0

現在不能更改 – user11085 2013-02-08 12:34:42

0

你需要使用緩存系統。 我認識的最好的Memcache加速你的應用程序真的很棒,它根本不使用數據庫。

0

簡單的答案:使用軟件無法加速任何事情。

原因:您正在選擇一張桌子的全部內容,並且您說這是一張大桌子。

你可以做的是緩存數據,但不使用Memcache,因爲它的緩存數據量有限(每個鍵1MB),所以如果你的數據超過了這個限制 - 使用Memcache來緩存龐大的結果集,而沒有提出一個維護鍵和值的有效方案。

索引不會有幫助,因爲您沒有得到WHERE子句,可能發生的是您可以稍微加快order by子句。在查詢之前使用EXPLAIN EXTENDED查看通過網絡傳輸數據所花費的時間,以及從查詢中檢索和排序數據所花的時間。

如果您的應用程序需要大量數據,以便爲它工作,那麼你有以下選項:

  • 獲得更好的服務器,它可以推動數據的速度
  • 重新設計應用程序,因爲如果它需要才能運行如此多的數據,它可能在考慮效率的設計不
0

優化查詢是一個很大的話題,超出範圍這個問題

這裏有一些亮點,這將提高你的SELECT語句

  • 使用適當的指數
  • 限制記錄數
  • 使用您需要的列名(而不是寫select * from table使用select col1, col2 from table

限制查詢大偏移量是有點棘手在mysql 此選擇語句對於大偏移將會很慢,因爲它hav E要處理大量的數據

SELECT * FROM table order by whatever LIMIT m, n; 

來這裏優化這個查詢是簡單的解決方案

select A.* from table A 
    inner join (select id from table order by whatever limit m, n) B 
    on A.id = B.id 
order by A.whatever