2016-11-18 8 views
2

私はinformation_schemaのいくつかのテーブルで非常に単純な選択クエリを実行していますが、常に時間がかかりすぎます。例えばなぜinfomation_schemaのクエリに時間がかかりますか?

がREFERENTIAL_CONSTRAINTS限度3 SELECT * FROM。

34秒をとります。

このクエリは非常にシンプルで、必要なテーブルスキャンはありません。条件などは必要ありません。なぜ時間がかかるのですか。

information_Schemaの他のテーブルにも多くの時間がかかります。

おかげ

答えて

1

はINFORMATION_SCHEMAテーブルは、実際にテーブルではありません。これらは、SQLインターフェイスを介してサーバー内部を公開するメカニズムです。これらのクエリに対する応答は、クエリが実行されるたびに「収集される」という意味で「テーブルに格納された」データからのものではありません。

データを収集するSQLレイヤーと下位レイヤーの間の通信レベルが、期待する最適化を常にサポートするとは限りません。たとえば、LIMITは、テーブル全体が内部的にレンダリングされてから、最初の3行を除くすべての行が破棄される可能性があります。このクエリはおそらく制限がある場合とない場合と同じです。

information_schemaの2つの一般的なルール - すべてのSQLでは本当に有効ですが、特にここでは、必要な列を選択するだけです(*ではなく、サーバーが必要以上に多くの作業を行う必要があります)。返されたすべての列が本当に必要でない場合)、WHEREと指定します。両方ともとなる場合があります。は内部作業の量を減らします。

もう1つの潜在的なパフォーマンス・キラーは、サーバー変数の重い調整(「チューニング」)です。ほとんどのシステムのほとんどの変数は、それよりも頻繁に単独で放置する必要があります。そのうちのいくつかは、table_open_cacheのように、サーバを悪化させることさえあります。

+0

このクエリでtable_open_cacheがどのように役立つのですか?説明していただけますか?このクエリは、スキャンするすべてのテーブルを開いていますか? –

関連する問題