【问题标题】:Pre run SQL query to be used by ASP.net applicationASP.net 应用程序使用的预运行 SQL 查询
【发布时间】:2014-07-23 08:57:48
【问题描述】:

我有一个在视图上运行的 SQL 查询,上面有很多通配符运算符,因此需要很长时间才能完成。

数据由 ASP.net 应用程序使用,有什么方法可以在一天内预运行一次查询,以便在 asp.net 应用程序需要时数据已经存在,并且只传递参数以获取特定的记录。

很多简化的例子是

select * from table

每天运行并将结果存储在某处,当 asp.net 传递参数时,仅获取特定记录,如

select * from table where field3 = 'something'

【问题讨论】:

  • 未过滤的数据有多大?
  • 尝试使用所需数据创建视图,然后从视图中检索数据。
  • 不,因为查询已经在我不想创建嵌套视图的视图上运行
  • 预运行?就像在 sql server 工作中一样?它可以在您定义的时间每天运行一次
  • 我的回答对你有用吗?

标签: asp.net sql sql-server tsql


【解决方案1】:

使用 SQLAgent (MSSQL) 或等效程序来运行预定进程,将结果存储到这样的表中......

IF EXISTS (SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(N'[dbo].[MyTemporaryTable]') AND type in (N'U'))
BEGIN
    TRUNCATE TABLE [dbo].[MyTemporaryTable];
    INSERT INTO [dbo].[MyTemporaryTable]
    SELECT * FROM [vwMyTemporaryTable];
END
ELSE
BEGIN
    SELECT * 
    INTO [MyTemporaryTable]
    FROM [vwMyTemporaryTableDataSource];
END

或者您可以将结果存储在 ASP.Net 中作为应用程序/会话变量,甚至是存储在应用程序/会话中的类中的属性。 Property 方法将在第一次请求数据时加载数据,然后使用内存。

 private MyObjectType _objMyStoredData;
    public MyObjectType MyStoredData
    {
        get
        {
            if (_objMyStoredData == null)
            {
                _objMyStoredData = GetMyData();
            }
            return _objMyStoredData;
        }
    }

但是,如果此报告的源数据只有 2,000 行...我想知道这一切是否真的有必要。也许提高查询的效率可以解决问题,而无需深入研究预缓存以及随之而来的缺点,例如重用可能过时的数据。

【讨论】:

    【解决方案2】:

    你可以使用redis。您可以在用户登录后运行视图。然后用视图数据填充 redis。在用户的会话上下文中设置该对象,以便在所有页面上都可以访问它。然后当用户注销时。清理redis。通过这种方式,用户不会每次都去数据库获取结果,而是从 redis 缓存中获取数据。它非常快。如果需要更多帮助,可以联系我。

    如果您觉得有帮助,可以将其标记为答案。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-02-28
      • 1970-01-01
      • 2021-09-15
      • 1970-01-01
      • 2018-11-11
      • 1970-01-01
      相关资源
      最近更新 更多