【问题标题】:Update SQL Database tables from the execution of Views against another database通过针对另一个数据库执行视图来更新 SQL 数据库表
【发布时间】:2015-10-29 18:10:07
【问题描述】:

这基本上是我的场景:

  • 我有一个关系数据库,其中包含大量表和每张表上的数百万行。
  • 在这个数据库上搜索对于一些大查询来说非常慢,所以我创建了几个视图,对数据和一些计算进行一些按摩,它通过连接表等为我提供了我需要的确切数据。 .

  • 现在我有了视图,我可以对它们运行超级简单的查询并非常轻松地提取我需要的确切信息。但是,如果我在运行时每当用户单击我网站上的按钮时都这样做,则需要相当多的时间,并且用户可能会遇到一些超时。这是因为无论我使用的是简化生活的视图,查询都是针对同一个庞大而庞大的数据库执行的......

我基本上想做的是拥有第二个数据库(它将连接到我的前端,而不是当前数据库),在那里我可以从我的视图中获得我感兴趣的数据'我已经在初始数据库上创建了(这是我需要的确切数据),但我不知道如何实现。

  1. 是否应该创建一些对第二个数据库执行的存储过程,然后用新数据更新第二个数据库的表?我怎么能那样做?我已经使用视图生成的表创建了第二个数据库,但是我需要开始批量处理该数据,我不知道如何首先批量处理初始数据,其次,如何在第一个数据库启动后立即增加数据成长……
  2. 另外,我认为一个好主意是在第一个数据库被填充数据库的后端工具修改后立即更新第二个数据库。这可能吗?触发器是我需要的吗?我怎么能这样做?

任何指针和示例将不胜感激。

谢谢!

【问题讨论】:

  • 我认为创建秒数据库本身是个坏主意
  • 修复 select 语句的性能问题的常用方法是索引。尝试查看您运行的查询的执行计划,看看您可以添加哪些索引。
  • 对不起,但我不太确定您所说的索引是什么意思。目前,我在数据库上搜索的方式是执行 X 次 JOIN(其中 JOIN 在 ID 列上完成),然后我执行的视图只是 SELECT * FROM VIEW WHERE column1Id = id AND column2Id=id 等。 ...我总是通过数据库中定义的 ID 加入和查询,所以不确定这是否是您所说的索引?
  • 我能够通过添加索引来改进搜索,但同时也使查询更轻松。谢谢! :) 顺便提一句。为什么我原来的问题是个坏主意?
  • 如果您甚至不知道索引是什么,那么您根本没有资格查询这种大小的数据库。您需要坐下来阅读一些数据库书籍,其中至少包括一本关于性能优化的书籍。并接受有关数据库的教育。您最初的想法是一个糟糕的想法,因为它会给数据库增加大量额外的工作量而基本上没有任何回报,而且这将非常复杂,并且需要专家才能正确处理,而不是最终导致糟糕的结果、不同步的数据库和不满意的用户。在您考虑这条路线之前,可能有 100 种不同的性能增强可供尝试。

标签: sql sql-server database database-backups


【解决方案1】:

如果您想要一种简单的方法来从视图中加载第二个数据库,您可以像这样运行和插入语句

INSERT INTO [secondDB].[dbo].[table_name]
(ColumnNames,...,N)

SELECT * 
FROM View
WHERE column1ID = ID
etc...

【讨论】:

    【解决方案2】:

    您可能应该使用日志传送。

    https://msdn.microsoft.com/en-us/library/ms190640.aspx

    来自主服务器的所有交易将几乎立即或延迟发送到辅助服务器(因此得名)。

    但是,视图确实让您的生活更轻松,但性能问题很可能是由于设计/模型错误、索引缺失、索引碎片、统计信息错误、索引过多或无用索引等原因造成的。 你也看过这个吗?

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-02-18
      • 1970-01-01
      • 1970-01-01
      • 2012-10-16
      • 2019-06-18
      • 2019-04-26
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多