我有一个汽车品牌,型号和年份的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)缓存查询结果?
答案 0 :(得分:1)
为什么不在应用程序级别缓存它,而不是甚至点击数据库?您可以使用SqlCacheDependency
SQL Cache Dependency
如果表更改则使缓存无效,否则甚至不会命中它。
答案 1 :(得分:0)
缓存列的绝对最小值和最大值是没有意义的,因为它们依赖于WHERE子句中完成的任何过滤。但是,您应该能够通过添加合适的索引来快速进行此查询。