4

我们目前有一个 SQL 联合数据库,将数据分成大致相等的 10 个分片,并按客户端 ID 过滤。

目前我们在执行过滤查询时遇到性能问题,例如,为特定客户端运行查询可能需要 3 分钟以上才能在某些分片中返回 4000 行。但是,在同一分片上的未过滤连接中运行完全相同的查询会在 4 秒内及时返回。一个值得注意的方面是,经历减速的分片往往包含更多的客户端,尽管数据更少。最可能的性能抑制因素(我相信)将是索引以及与过滤/未过滤连接相关的东西。

搜索了一下,我没有找到太多关于跨分片的查询性能/分片上的特定索引策略的信息(除了 Azure 显然不支持索引视图)。我的印象(因此需要澄清)是索引应用于分片的所有成员,而不是逐个成员。

如果是前者,那么我们就有点麻烦了,除了重新分片这个没有意义的特定分片,考虑到唯一的区别是客户端的数量,而不是数据的大小。我们将要尝试的几件事是将过滤器显式添加到索引中,甚至将过滤器添加到每个查询中。可以肯定地说,我们不乐意离开过滤连接。

有没有其他人遇到过这个问题,或者可能提供一些方向来表明未过滤的连接明显优于过滤的连接?

提前致谢...

4

1 回答 1

0

联盟中的索引是在逐个联盟成员的基础上应用的。如果您从单个索引成员开始并执行了 SPLIT 操作,则索引会自动应用于 SPLIT 的产品。但是如果在创建多个成员后应用了索引,则需要显式地为每个成员添加索引。

所以希望你不是在泡菜。

由于 4 月份宣布的新 SKU 不支持该功能,因此您可能需要考虑替代联盟向前发展。

于 2014-05-21T22:27:28.223 回答