小编Mik*_*nov的帖子

在 SQL Server 上构建执行计划花费的时间太长

我有一个 SQL Server 2014 实例 (12.0.2000.8) 和一个非常复杂的 SELECT 语句,大约有 20 个连接。此查询在 PostgreSQL、Oracle 和其他数据库上的相同数据集上运行良好,整个执行大约需要 1 分钟。

但在 SQL Server 上大约需要 40 分钟。我试图查看执行计划并开始等待……我试图通过从应用程序会话执行查询来获取执行计划,但没有执行计划。

然后我得到了查询,在SQL Server Management Studio中询问“显示估计的执行计划”,我也开始等待。所以,看起来仅仅构建执行计划就花费了太多时间。所有统计数据都是用“exec sp_updatestats”收集的,我在 sys.stats 中检查了它 - 一切看起来都很好。所有索引都已就位。

我评论了所有的连接并开始一一取消注释,然后

  SET STATISTICS TIME ON
Run Code Online (Sandbox Code Playgroud)

显示每个未注释的连接都需要更长的时间来解析,例如 13 个连接的时间:

SQL Server parse and compile time:
   CPU time = 32250 ms, elapsed time = 32729 ms.
Run Code Online (Sandbox Code Playgroud)

所以,这绝对是一个解析问题。

select count(*) from sys.index_columns
where object_id in (OBJECT_ID('tables_names'),...')
Run Code Online (Sandbox Code Playgroud)

说有 128 列,当

select * from sys.indexes
where object_id in (OBJECT_ID('tables_names'),...')
Run Code Online (Sandbox Code Playgroud)

返回带有 HEAP、CLUSTERED、NONCLUSTERED 索引的 43 行。

你能推荐看什么吗?为什么要解析这么多? …

sql-server optimization execution-plan sql-server-2014

9
推荐指数
2
解决办法
778
查看次数

更改分区列的排序规则 (SQL Server 2017)

我正在尝试更改列的排序规则:

ALTER TABLE [dbo].[yourdad] ALTER COLUMN [yourmam] varchar(36) COLLATE SQL_Latin1_General_CP1_CI_AI NOT NULL; 
Run Code Online (Sandbox Code Playgroud)

它给出了这样的消息:

消息 5074,级别 16,状态 1,第 1 行 对象“yourdad”依赖于列“yourmam”。消息 4922,级别 16,状态 9,第 1 行 ALTER TABLE ALTER COLUMN yourmam 失败,因为一个或多个对象访问此列。

它具有依赖于该列的分区模式和功能。

目前我喜欢超过 40k 的表,其中包含应该更改排序规则的列。

是否可以在不重新创建表格的情况下更改排序规则?

  1. 删除分区索引 - 删除。

  2. 但是当我尝试删除架构时:

    删除分区方案你爸爸

消息 7717,级别 16,状态 1,第 1 行 分区方案“yourdad”当前正用于对一个或多个表进行分区。

这是我不想安装的数据库上的一种新的不区分大小写的数据库整理,旧的是 - 区分大小写。

sql-server collation partitioning

6
推荐指数
1
解决办法
451
查看次数

Postgres EXPLAIN ANALYZE 超级慢

Redhat 上有 Postgres 9.6 我想解释一下慢查询(相当复杂的一个),它需要太多时间。我与 EXPLAIN ANALYZE 的会话消耗了一个 CPU 的 100% 并且即使在 24 小时后也没有完成。Postgres无法建立执行计划如何分析问题?

postgresql performance explain

1
推荐指数
1
解决办法
1096
查看次数

通过sql_id获取oracle执行计划

是否可以通过sql_id获取当前正在运行的查询的执行计划?

我无法成功:

select 
   DBMS_SQL_MONITOR.REPORT_SQL_MONITOR
        (sql_id=>'b3x6apqyskn7x') report
from dual;
Run Code Online (Sandbox Code Playgroud)

oracle execution-plan

0
推荐指数
1
解决办法
1万
查看次数