sql >> データベース >  >> RDS >> Sqlserver

SQL Server:sysテーブルではなくinformation_schemaテーブルを使用する必要がありますか?

    事実上移植可能である必要があることがわかっているアプリケーションを作成している場合、または非常に基本的な情報のみが必要な場合を除いて、最初は独自のSQLServerシステムビューを使用することにデフォルト設定します。

    Information_Schema ビューには、SQL-92標準と互換性のあるオブジェクトのみが表示されます。これは、インデックスなどの非常に基本的な構造でさえ情報スキーマビューがないことを意味します(これらは標準で定義されておらず、実装の詳細として残されています)。SQLServer独自の機能は言うまでもありません。

    さらに、それは人が想定するかもしれない携帯性のための万能薬ではありません。実装はまだシステム間で異なります。 Oracleはそれを「箱から出して」実装することはまったくなく、MySqlのドキュメントには次のように書かれています。

    SQL Server 2000(これも標準に準拠しています)のユーザーは、強い類似性に気付くかもしれません。ただし、MySQLは、実装に関係のない多くの列を省略し、MySQL固有の列を追加しました。そのような列の1つは、INFORMATION_SCHEMA.TABLESテーブルのENGINE列です。

    外部キー制約などのパンとバターのSQL構造の場合でも、Information_Schema ビューは、sys.よりも操作効率が大幅に低下する可能性があります。 ビューは、効率的なクエリを可能にするオブジェクトIDを公開しないためです。

    例えばSQLクエリが1秒から11分に遅くなるという質問を参照してください-なぜですか?および実行計画。

    INFORMATION_SCHEMA

    sys



    1. SQLで数値を丸める方法

    2. AmazonRDSでのフェイルオーバーとフェイルバック

    3. Oracle SQL Developerでジョブをスケジュールする方法は?

    4. バッチファイルを使用してSQLクエリのセットを実行しますか?