2013-03-18 72 views
0
SELECT DISTINCT tag, occurences 
FROM ' . DBPREFIX . 'tags 
WHERE ID >= 
(
    SELECT 
     FLOOR(MAX(ID) * RAND()) 
    FROM 
     ' . DBPREFIX . 'tags 
) AND exclude=0 ORDER BY ID LIMIT ' . MAX_TAGS 

我有牆紙網站,我有服務器滯後的問題 - 每次來訪客到我的網站是加載標籤雲(隨機25標籤)和執行此查詢。我有4000多個壁紙和10000多個標籤。如何優化這個查詢?我的網站每天至少打破3-5次。如何優化SQL查詢 - 標籤雲

P.S.我的朋友建議我每5分鐘執行一次查詢,但我不知道如何實現它。

+0

全功能: 功能get_tags_data() { \t \t $查詢= $這個 - > DB->查詢 \t \t( \t \t \t「SELECT \t \t \t \t DISTINCT標籤, \t \t \t \t發生 \t \t \t從 \t \t \t \t'。 DBPREFIX。 '標籤 \t \t \t WHERE ID> =(SELECT FLOOR(MAX(ID)* RAND())FROM'。DBPREFIX。'tags)AND exclude = 0 ORDER BY ID LIMIT'。 MAX_TAGS \t \t); \t \t return($ query-> num_rows())? $ query-> result():FALSE; \t} – user2183329 2013-03-18 17:23:49

回答

0

你的朋友有一個好主意。無論您使用的是哪種服務器端框架,都可以爲它尋找緩存選項。

另一個想法是擺脫「隨機」的要求。

+0

更改rand爲什麼? – user2183329 2013-03-18 18:08:45

+0

只要擺脫它。返回數據庫提供給您的前25條記錄。 – joelt 2013-03-18 23:58:10