尽量不要太聪明,我可以对SQL缓存做出假设吗?

时间:2012-02-26 22:29:28

标签: linq sql-server-2008 caching

我有一个汽车品牌,型号和年份的SQL2008表。要向用户显示年份列表,我需要知道表格中的最低年份和最高年份,例如1919年至2012年。

我使用LINQ查询如下:

return (from car in context.Cars select car.Year).Min();

...转变为这个SQL查询:

SELECT MIN([t0].[Year]) AS [value] FROM [dbo].[Cars] AS [t0]

我知道(而且你知道)min很少会发生变化,最大值每年最多变化一次。但由于它们确实依赖于数据,因此它们不适合作为常量。由于它们可以在运行时更改,我不想让它们变为静态。

我假设SQL将缓存min和max,并且只要基础表没有被修改,它就足够聪明地返回我缓存的信息。除非它成为性能瓶颈,否则更多的是好奇心,但只要表没有改变,我在多大程度上可以依赖SQL(在这种情况下,SQL2008 R2)缓存查询结果?

2 个答案:

答案 0 :(得分:1)

为什么不在应用程序级别缓存它,而不是甚至点击数据库?您可以使用SqlCacheDependency SQL Cache Dependency 如果表更改则使缓存无效,否则甚至不会命中它。

答案 1 :(得分:0)

缓存列的绝对最小值和最大值是没有意义的,因为它们依赖于WHERE子句中完成的任何过滤。但是,您应该能够通过添加合适的索引来快速进行此查询。