Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
SQL Server多租户数据库分区与索引_Sql_Sql Server_Multi Tenant_Database Partitioning_Database Indexes - Fatal编程技术网

SQL Server多租户数据库分区与索引

SQL Server多租户数据库分区与索引,sql,sql-server,multi-tenant,database-partitioning,database-indexes,Sql,Sql Server,Multi Tenant,Database Partitioning,Database Indexes,我在SQL Server上有一个遵循星型模式的OLAP数据库。 我有几个事实表和几个维度表。 事实有3000万到1.5亿行。但我处于多租户环境中(我在每个事实中都有租户id) 目标是在事实表上具有良好的查询性能。它们链接到6-7个维度,查询可以有1,2。。。10个过滤器。 但是所有的查询在租户id上都有where子句 我想知道最好的解决方案是否是用租户id的第一个字母来划分事实表。或者最好是建立几个索引(但是我的查询可以过滤10个字段,包括多个连接,所以如果我想有效地覆盖所有查询,我有很多索引)

我在SQL Server上有一个遵循星型模式的OLAP数据库。 我有几个事实表和几个维度表。 事实有3000万到1.5亿行。但我处于多租户环境中(我在每个事实中都有租户id)

目标是在事实表上具有良好的查询性能。它们链接到6-7个维度,查询可以有1,2。。。10个过滤器。
但是所有的查询在租户id上都有where子句

我想知道最好的解决方案是否是用租户id的第一个字母来划分事实表。或者最好是建立几个索引(但是我的查询可以过滤10个字段,包括多个连接,所以如果我想有效地覆盖所有查询,我有很多索引)


谢谢你的帮助

假设您的查询不会跨越不同的租户,那么最好基于租户对事实表进行分区,这样每个租户都有自己的事实表分区。谢谢您的建议。但在SQL Server上,我不能在字段上进行分区,我必须执行一个函数。这就是为什么我想知道我是否可以分割第一个字母(或两个第一)。你们有多少租户?我不确定这个问题是否真的需要分区。只要把
tenant\u id
作为相关索引的第一列就足够了。我有大约500个租户。问题是我的查询中有很多可能的组合。我有9个可能的过滤器,您可以选择想要的过滤器(有些过滤器与维度表进行了连接)。假设您的查询不会跨越不同的租户,最好基于租户ID对事实表进行分区,这样每个租户都有自己的事实表分区。谢谢您的建议。但在SQL Server上,我不能在字段上进行分区,我必须执行一个函数。这就是为什么我想知道我是否可以分割第一个字母(或两个第一)。你们有多少租户?我不确定这个问题是否真的需要分区。只要把
tenant\u id
作为相关索引的第一列就足够了。我有大约500个租户。问题是我的查询中有很多可能的组合。我有9个可能的过滤器,您可以选择想要的过滤器(有些过滤器使用维度表进行连接)。