我有很多嵌套的SELECT語句的大型查詢。一個簡化版本,可能是這樣的:內部查詢的MySQL查詢緩存
SELECT * FROM tableA WHERE x IN(
SELECT * FROM tableB WHERE x IN(
SELECT * FROM tableC WHERE user_id = y
)
)
重要的是,最裏面的聲明看USER_ID並選擇ID號碼清單查詢的其餘部分使用開始了。
我遇到的問題是,即使兩個用戶在tableC中有相同的數據,查詢的其餘部分似乎沒有被緩存。
例如,如果SELECT * FROM tableC WHERE user_id = 1
返回(1,2,3,4,5) 和SELECT * FROM tableC WHERE user_id = 2
也返回(1,2,3,4,5)
如果我運行與完整查詢USER_ID = 1執行時間約爲0.007秒。如果我重新運行查詢,我會減少0.002的執行時間。如果我將user_id更改爲2並運行查詢,則第一次運行查詢時,執行時間會回到0.007。 mySQL是否可以緩存查詢的各個部分的結果?
查詢的這部分怎麼樣?SELECT * FROM tableB WHERE x IN(..)'?結果與user_id = 1或2時相同。但是,查詢的執行時間暗示不使用緩存 – user1063998
查詢緩存的工作原理如下:1.獲取查詢並創建哈希。 2.檢查是否有緩存結果。 3.如果是,則返回它,如果沒有保存到緩存並返回。在你的情況下,你會給兩個不同的哈希,因爲查詢是不同的,並且它們返回什麼結果並不重要 –
謝謝安德烈。我想解決方案是將較大的查詢分成兩個較小的查詢。這樣我可以節省重新計算昂貴的,如果可能的話 – user1063998