假设有一个名为theirdb
的其他人拥有的数据库,其视图非常慢,名为slowview
。我有一个定期查询此视图的应用程序,但是,因为它需要太长时间,我想将其实现为我拥有的数据库中的表(mydb.materializedview
)。
Teradata中是否有办法创建别名数据库对象,以便我可以像select * from theirdb.slowview
一样,但实际上是从mydb.materializedview
中选择?
我需要对他们的观点做一些严格的测试,但它太慢了,我几乎没有时间去测试任何东西。另一个选项是编辑代码,使其从mydb.materializedview
读取,但遗憾的是,在这种情况下不是一个选项。
答案 0 :(得分:1)
Teradata不允许您在对象之间创建别名或符号链接。
如果对象完全符合应用程序中的数据库名称和视图名称,则您的选项会受到更多限制。您必须创建其视图定义的备份,并将实体化表放在同一个数据库中。在计划的应用程序中断期间,这显然是最好的。
如果对象未完全由应用程序中的数据库名称和视图名称限定,并且依赖于默认数据库设置或应用程序变量,则您可以更灵活一些。如果所有工作都在视图级别完成,则可以在计划拥有其slowview
的具体化版本的另一个数据库中复制环境。然后,通过更改用户默认数据库或应用程序变量,您可以将其指向重复环境以完成测试。
此外,您可以尝试使用连接索引覆盖(部分或完全)构成slowview
的查询。这允许您保留代码库,因为它在应用程序中,但对于连接索引可以满足的查询,优化器将使用连接索引。请记住,连接索引确实会产生成本,因为它本质上是用于构造它的SQL的物化版本。这意味着必须考虑额外的IO和变更管理问题。
最后,您可以尝试在slowview
内的对象上创建其他辅助索引或哈希索引,以提高其性能。