2012-07-17 129 views
0

DBMS(Oracle,MySQL,SQLite,PostGres)是否提供緩存結果集?我想了解什麼是緩存SQL結果最常用的方法,以便減少數據庫負載。我的理解是數據庫是擴展應用程序的瓶頸,而緩存有助於減少數據庫的負載。緩存SQL結果集

如果DBMS不提供緩存結果,使用緩存工具(如Memcache)是否是個好主意?

+1

不能爲其他人說話,這只是略有偏見的意見,但MySQL查詢緩存在過去一直失敗。從長遠來看,像memcached這樣的東西將爲您提供更好的服務。 – Corbin 2012-07-17 05:07:00

回答

3

數據庫通常緩存查詢的執行計劃,而不是結果集本身。

一個可行的方法當然是做你的建議,並使用Memcache。 Memcache只是提供這種功能的衆多工具之一。這個決定在很大程度上取決於你正在使用的環境,應用程序的類型(web vs windows),體系結構等。

如果結果集不是太大,你可以將它緩存在內存中。

+1

我不知道'mysql',但是你可以在oracle中做到這一點,請看鏈接提供[link](http://www.oracle-base.com/articles/11g/cross-session-plsql-function- result-cache-11gr1.php) – 2012-07-17 20:11:21

+1

@GauravSoni MySQL也支持相同的事情 - 或者種類,有很多限制 - http://dev.mysql.com/doc/refman/5.1/en/query-cache.html但如果這個想法是減少數據庫服務器的負載,我認爲把緩存數據放在不同的地方更有意義。在數據庫端緩存數據仍然需要在數據庫上進行一些處理,儘管肯定會降低... – Icarus 2012-07-17 20:35:18

+0

@lcarus:感謝您的迴應,我明白了你想傳達的信息:) – 2012-07-17 20:40:59

1

Oracle提供了幾種實現緩存的方法。 這取決於您使用的是哪個版本的Oracle數據庫。 在舊版本中,您可以選擇「在內存中固定表格」。這有效地將任何經常訪問的表緩存到緩存中。需要注意的是,這可能會過於寬鬆地使用。 也有使用物化視圖的選項。現在,這不是一種緩存方法,而是與緩存一樣的好處。 Oracle 11g現在允許在數據庫和會話級別緩存查詢。這是通過使用提示來實現的。尋找RESULT_CACHE_MODE和RESULT_CACHE。有各種配置設置,EXPLAIN PLAN可以顯示是否正在從RESULT CACHE讀取查詢。 我沒有像Memcache(?)這樣的第三方工具的使用經驗,但使用諸如此類工具的危險 - 您是否可能實際上繞過了Oracle實施到其自己的RDBMS中的任何事情(某些好處)。