SQL Server性能调优大表

时间:2017-07-26 01:26:33

标签: sql sql-server

我有一个755列的表,截至目前已有200万条记录,它将会增长。有许多程序通过其他表连接访问它,运行缓慢。现在很难将它们拆分/标准化,因为一切都已经建好,而且客户还没有准备好花费太多。有没有办法让查询更快地访问该表?请指教。

列存储索引会有帮助吗?

3 个答案:

答案 0 :(得分:0)

755列很多。您应该尝试索引主要用于where子句的列。这可能会加快这个过程

答案 1 :(得分:0)

他们准备花多少钱?

可以将此表拆分为多个1到1个连接表(垂直分区),然后使用视图将其作为单个blob呈现给现有代码。

运气好的话,你可能会频繁地加入淘汰赛,以使其值得。

View可能需要INSTEAD OF个触发器才能完全复制现有逻辑。 INSTEAD OF触发器有许多限制,例如不支持OUTPUT条款,根据您的具体设置,这可能很难克服。

您可以将视图命名为与现有表相同,这样就无需在任何地方修复代码。

IMO这是最简单的,你可以做一个完整的DB重新分解练习。

请参阅:http://aboutsqlserver.com/2010/09/15/vertical-partitioning-as-the-way-to-reduce-io/https://logicalread.com/sql-server-optimizer-may-eliminate-foreign-key-joins-mc11/#.WXgEzlERW6I

答案 2 :(得分:0)

很好,不用担心,实际上你拥有多少列在sql server中并不重要(但要小心我说'有')。主要问题是数据计数以及您在查询中选择的列数。首先你可以检查几点。

  1. 如果在任何地方使用
  2. ,请不要使用*选择器进行更改
  3. 在连接中,不要直接使用它,您可以先将其过滤为内部选择。 (试试吧,我不知道你的桌子所以我告诉一般规则。)
  4. 尝试减少ex:的历史数据计数用于旧记录。这种技术取决于您组织的需求。
  5. 尝试使用列索引和类似功能。
  6. 当然,请在查询中删除动态选择。
  7. 我希望其中一个能够奏效。