2012-11-12 90 views
1

是否有可能使MySQL在刷新緩存之前更新並保持該緩存至少10分鐘時不刷新緩存?MySQL緩存,在更新之前不刷新,直到10分鐘之前

基本上,我正在緩存一個分析約200k +記錄並返回10行數據的查詢。查詢大約需要1.5 - 3秒。我正在使用SQL_CACHE來緩存該查詢,第一次後需要0.007(+ - )秒。該表經常更新(多次不到一分鐘)。所以我想讓MySQL在持有緩存至少10分鐘之前刷新緩存的查詢重新計算。

順便說一句,查詢數據是唯一的每個用戶在網站上。

我使用的Codeigniter框架,我知道他們有一個內置的查詢緩存功能,但它是基於文件系統。這就是爲什麼我更喜歡MySQL的緩存功能...

感謝您的幫助!

回答

0

三兩件事使得從MySQL的緩存中刪除的東西:

  1. 沒有足夠的空間
  2. 查詢背後的數據改變
  3. MySQL進程重新啓動

您已經對#1有一定的控制權,因爲您可以更改緩存大小。但是,其他查詢仍可佔用緩存空間。我不知道控制#2有多重要。您可能想要使用SELECT SQL_NO_CACHE來防止這些人進入緩存。

從事物的聲音來看,MySQL並沒有給你你需要的東西來緩存你想要的東西。

您是否考慮優化查詢?在那個筆記上,你能發佈實際的查詢嗎?

+0

我不想阻止數據進入緩存。我只想防止表更新時緩存被刷新。該表基本上保存着流量數據,所以記錄經常被添加/更新。我只需要MySQL在緩存數據失效之前保存至少10分鐘左右。我的查詢就像: 'SELECT SQL_CACHE dday,COUNT(*)AS num,SUM(hits)AS sum_hits FROM table1 WHERE user_id ='AND ANDmonth ='11 AND AND dyear ='2012'GROUP BY dday' – stov01

+0

這實際上是一個非常簡單的查詢。你有沒有嘗試添加user_id到表索引? –

+0

所有必需的索引已被添加。我認爲最好的選擇是使用memcached編寫一個新的數據庫緩存驅動程序來處理緩存的數據。「 – stov01