0

次の定義を持つテーブルがあるとします。

create table consTest(c1 integer null constraint consTest1 check(c1 < 100),
                      c2 integer not null constraint consTestU1 unique,
                      c3 integer not null,
                      c4 integer null,
                      constraint consTest2 check(c2 > c1),
                      constraint consTestU2 unique(c3))

私のアプリケーションには、テーブル内の列の制約関係を記述するためにシステム テーブルに対して実行する次のクエリがあります。

SELECT object_schema_name(t17.referencing_id), object_name(t17.referencing_id),
       coalesce(col_name(t17.referenced_id, t17.referenced_minor_id), NULL),
       t16.definition, t16.type
FROM   { oj sys.check_constraints t16 INNER JOIN  sys.sql_expression_dependencies t17 ON ( t17.referencing_id = t16.object_id )  }  
WHERE t17.referenced_id = object_id('consTest') AND
      t16.type = 'C' AND
      object_name(t17.referencing_id) = 'consTest2'
ORDER BY 1 ASC, 2 ASC, 3 ASC

このクエリを実行すると、SQL Server から断続的なクラッシュが発生することがあります。私の質問はクラッシュに関するものではありませんが、クエリに対して実行できる最適化を誰かが推奨できるかどうかを確認することです。

4

1 に答える 1

0

私のマシンでは、元のクエリで .0100221 対 .0213887 の推定サブツリー コストが得られました。

SELECT object_schema_name(t17.referencing_id)
    , object_name(t17.referencing_id)
    , coalesce(col_name(t17.referenced_id, t17.referenced_minor_id), NULL)
    , t16.[definition]
    , t16.[type]
FROM sys.sql_expression_dependencies t17
JOIN sys.check_constraints t16
    ON t17.referencing_id = t16.object_id
    AND t16.[type] = 'C'
    AND object_name(t17.referencing_id) = 'consTest2'
    AND t17.referenced_id = object_id('consTest');
GO
于 2013-04-10T00:50:17.787 に答える