在没有索引视图的情况下,在 SQL Server 中创建复杂视图的最佳方法是啥?
Posted
技术标签:
【中文标题】在没有索引视图的情况下,在 SQL Server 中创建复杂视图的最佳方法是啥?【英文标题】:Whats the best way to create a complex view in SQL Server, without an Indexed view?在没有索引视图的情况下,在 SQL Server 中创建复杂视图的最佳方法是什么? 【发布时间】:2018-08-14 21:31:12 【问题描述】:我有一个简单的 Customer、Setting 和 CustomerSetting 结构。
大约有 60 种设置,都使用 UNIQUEIDENTIFIER 作为键,因为这些设置可以在多个系统之间共享并且可以按任意顺序创建,因此不保证 Id 相同)
每个客户都可以拥有这些设置,但不一定是其中的任何一个或全部。
我正在尝试找到列出所有客户和所有设置的最快(性能方面)方式。
我尝试过使用函数、表值函数、连接、交叉应用……而且速度非常慢。仅对于下面的示例,我的本地 SQL 服务器需要 35 秒才能列出 2,000 个用户及其设置。在现实生活中我有超过 250 万。
FN 和 TVF 对于单个用户来说非常快 - 但一旦达到多行,它就会停止。
写一个快速版本有什么诀窍吗?
注意:我很高兴在视图中硬编码设置 GUID,因为它们很少更改。
注意:数据可能会非常频繁地更改,因此(我认为)索引视图已被淘汰。
Sample Database Tables, Indexes, View, Data and Select * I am trying to acheive
重要提示 - 这是显示结构的数据样本,而不是完整的数据库。
【问题讨论】:
重新性能:需要给CustomerSetting
表添加索引。我建议使用复合 (Id_Customer, Setting),但您应该尝试一下。见sqlskills.com/blogs/kimberly/…
看看这个:***.com/questions/1336449/eav-over-sql-server
【参考方案1】:
真实的结构有索引吗?而不是 20 个关节,您只需 PIVOT 将 SettingValue 行放入列中
【讨论】:
以上是关于在没有索引视图的情况下,在 SQL Server 中创建复杂视图的最佳方法是啥?的主要内容,如果未能解决你的问题,请参考以下文章
在不添加/删除聚集索引的情况下减少 SQL Server 表碎片?
Sql server 创建索引后,只有查询后重建才会生效,不知为啥?
在这种情况下,在 SQL Server 中对三个 nchar 列进行索引的最有效方法是啥?