はINFORMATION_SCHEMAテーブルは、実際にテーブルではありません。これらは、SQLインターフェイスを介してサーバー内部を公開するメカニズムです。これらのクエリに対する応答は、クエリが実行されるたびに「収集される」という意味で「テーブルに格納された」データからのものではありません。
データを収集するSQLレイヤーと下位レイヤーの間の通信レベルが、期待する最適化を常にサポートするとは限りません。たとえば、LIMIT
は、テーブル全体が内部的にレンダリングされてから、最初の3行を除くすべての行が破棄される可能性があります。このクエリはおそらく制限がある場合とない場合と同じです。
information_schemaの2つの一般的なルール - すべてのSQLでは本当に有効ですが、特にここでは、必要な列を選択するだけです(*
ではなく、サーバーが必要以上に多くの作業を行う必要があります)。返されたすべての列が本当に必要でない場合)、WHERE
と指定します。両方ともとなる場合があります。は内部作業の量を減らします。
もう1つの潜在的なパフォーマンス・キラーは、サーバー変数の重い調整(「チューニング」)です。ほとんどのシステムのほとんどの変数は、それよりも頻繁に単独で放置する必要があります。そのうちのいくつかは、table_open_cache
のように、サーバを悪化させることさえあります。
このクエリでtable_open_cacheがどのように役立つのですか?説明していただけますか?このクエリは、スキャンするすべてのテーブルを開いていますか? –