我有一個想法,我還沒有實施,因爲我有一些恐懼,我可能會咆哮錯誤的樹...主要是因爲谷歌搜索主題返回這麼幾個結果。數據庫中的記憶 - 一個好主意?任何經驗?
基本上,我有一些SQL查詢很慢,很大程度上是因爲它們有很耗時的子查詢。例如,他們可能會做一些事情,比如「給我一個10-15歲之間的男孩騎着紅色的自行車」。這是昂貴的,因爲它通過所有的自行車溜走,但最終的結果是一個單一的數字。而就我而言,我並不需要這個數字是100%最新的。
這種問題的最終解決方案似乎是應用基於OLAP的引擎預先緩存這些排列。然而,就我而言,我並不是真的試圖按照大量指標來分割和切分數據,並且我不希望將另一個進程/數據存儲區運行時的架構複雜化。
所以......我的想法基本上是在數據庫中記憶這些子查詢。我可能有一個名爲「BicycleStatistics」的表,它可能會將該子查詢的輸出存儲爲其輸入和輸出的名稱值對。
防爆名稱:「c_red_g_male_a_10-15」值:235
而且具有與查詢運行memoizes這些值是表的機制。
有沒有人在這種情況下,並嘗試過類似的東西?我認爲這樣的解決方案比「在你的數據庫中引入大量內存並讓數據庫處理它」有價值的原因是(A)我的數據庫比我可以方便地在它上面扔的RAM的數量更大, B)數據庫將確保我得到這些統計數據的確切數字,而我上面的大贏家是我可以確定這些數字是過時的一兩天。
感謝您的任何想法/反饋。
湯姆
你看過查詢計劃,看看你的查詢爲什麼這麼慢?這可能是因爲您正在使用效率低下的方法,例如相關的子查詢而不是JOIN,或者您在某個位置缺少索引。 –
「這種問題的最終解決方案」 - 首先檢查您的查詢工作負載是否具有正確的索引 –
事實上,我花了大量時間確保查詢完全使用索引。我上面使用的這個例子是有點人爲的,但在我的情況下,就好像我擁有幾百萬輛自行車......並且我正在努力使其達到規模,以便它可以每秒運行幾次。 –