2012-07-17 225 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中的任何事情(某些好处)。