2012-06-01 520 views
1

我的表tbltemp有大約9萬記錄。這些列是:id(主鍵,自動增量),name,qty, price, status,mod_date,created_dateMysql查詢時間長

我的查詢是:

SELECT * 
FROM tbltemp 
WHERE qty > 3 
ORDER By Rand() 
LIMIT 50 

大約需要7到10秒來執行。我怎樣才能優化我的表或查詢?

+1

可能重複[如何優化MySQL的ORDER BY RAND()函數?](http://stackoverflow.com/questions/1244555/how-can-i-optimize-mysqls-order-by-rand功能) – Interrobang

+0

爲什麼你必須在這裏執行'ORDER By Rand()'? – Rahul

+0

query' select * from tbltemp where qty> 3 ORDER By id Limit 50'需要多長時間? – Rahul

回答

0

您應該在qty列上創建廣告索引。
無論如何ORDER By Rand()是耗時的...

+0

這將是一個可選的好東西,但根本不需要。我相信,如果他運行查詢'select * from tbltemp where qty> 3 ORDER By id Limit 50' ...將會更快。 – Rahul

+0

我想顯示隨機列表,當每次用戶刷新我的頁面..這就是爲什麼我在查詢@Rahul –

+0

@FloraClinton使用「ORDER BY RAND()」,我已經發布了一個答案。看,如果這有效。 – Rahul

0

這是order by rand()的替代品。試試這個一次,看看它是否

select @lims := floor(1+rand()*(count(*) - 1)) from tbltemp; 

PREPARE mystatement FROM "SELECT * FROM tbltemp WHERE qty > 3 LIMIT ?, 50"; 

EXECUTE mystatement USING @lims; 
0

在您的查詢:

SELECT * FROM tbltemp WHERE qty > 3 ORDER By Rand() LIMIT 50 

查詢優化請看看:

  1. ORDER BY子句是採取長期的主要原因時間。
  2. 將索引添加到qty列。
  3. 另外你使用的存儲引擎也會影響查詢的性能 優化.MISISAM是最快的存儲引擎。