我们有一个供应商交付的数据库,到目前为止,我已经能够避免对数据库结构进行任何更改。我们很快将直接直接查询表格以获取相关项目。为了获取我们需要的所有数据,我们需要创建一个包含多个联合的大型SQL语句。
select ... from table1
union
select ... from table2
...
select ... from tableN
速度是这个项目的首要任务。是否可以更快地创建一个视图来进行连接然后只查询这个视图(从而对供应商数据库进行更改)或者只是从我们的应用程序运行union语句?
我知道更改供应商数据库所涉及的潜在问题,因此我寻找反馈的原因。
答案 0 :(得分:1)
没有视图会更快(除了开发时间)。
如果可行的话,使用UNION ALL会更快。 UNION查找重复的记录并将其从最终结果中删除。如果您知道设计中的记录(例如每个表是针对不同的clinet或每个表具有不同的日期范围)都不能重复,则UNION ALL不会尝试DISTINCT结果集,因此运行速度更快。
答案 1 :(得分:1)
对于供应商数据库,我会非常犹豫是否要对任何现有表进行更改。添加类似视图的东西似乎更安全,因为您是唯一一个将使用它的人。我对该视图最大的担心是,如果您从供应商处获得了更新数据库的更新,那么您可能会失去视图。
除非您使用索引视图,否则我认为您不会看到使用该视图会带来任何性能提升。遗憾的是,您无法在使用union创建的视图上创建索引(至少在SQL Server中)。
就个人而言,当把逻辑放在应用程序中而不是把它放在DB中时,我倾向于DB。根据我的经验,这些类型的更改更易于部署和维护。
如果我在你的情况下,我会继续创建视图,如果它会让你的生活更轻松。但同样,不要指望性能提升。