我们最近更新了DataWarehouse(MS SQL 2000数据库)以包含一个新表,以控制用户在所有其他表中的信息访问级别。没有太多细节,新表具有用户ID和他们可以访问的账户ID列表。 DataWarehouse中的所有表都创建了相应的视图,并且我们要求我们的用户使用这些视图来访问数据(从而根据初始访问控制表中的访问级别限制其视图)。MS SQL Datawarehouse对非唯一密钥表的性能改进
对于使用许多这些视图的复杂查询,我们显然有一个问题,即多次连接相同的访问控制表。由于有很多查询我们无法控制访问此资源,因此目前我们无法做很多工作。因此,我们需要对盒子本身做出任何改变,以优化访问速度。
Datawarehouse只在一夜之间更新,说实话,这是不相关的 - 插入速度不是必需的,只有选择。如果需要的话,我们也可以重建索引。
我们的问题是,尽管在这个非唯一记录(UserID列)上有一个索引,但在执行计划跟踪时,我们看到Table Scans被用来代替Index Seek,我知道它基本上忽略了指数。这导致了可怕的性能影响 - 上周的一项质询表示,执行一分钟现在可能需要10分钟,有些则推迟了一个小时。
现在引用此表的所有其他视图都会加入非索引列(帐户ID),然后基于用户的NT ID筛选出返回的帐户数。
有没有人有什么建议,我们可以做些什么来提高性能?无论是在短期内(我们可以在基础设施方面改变的东西),还是长期的(对数据库模式的改变,尽管考虑到数据库的使用方式,我们不能轻易做到这一点)。
谢谢!
大卫