私は、一般的な共有ホスティング サービスで一連の自己開発アプリケーションを実行しています。許可されたテーブルの静的に構成されたテーブル リストから、D/B メタデータのプレフィックスに基づくテーブルのリストに基づくリストに移動しました。このバージョンをパブリック サービスにプロモートしたところ、リクエストごとのレイテンシが平均2.3 ~ 2.4 秒増加しました。一部のインストルメンテーションは、これが完全に 1 つの SQL クエリにかかっていることを明らかにしました。
SELECT TABLE_NAME AS name
FROM information_schema.tables
WHERE TABLE_SCHEMA = '<DBname>'
AND TABLE_NAME LIKE '<TablePrefix>%';
結果セットの列に明示的に名前を付けたかったので、これを使用しました。ただし、代替クエリを使用してこれをコーディングすると、 2 ミリ秒未満で実行されるコード行が追加されます。
SHOW TABLES LIKE '<TablePrefix>%';
私のサービス プロバイダーは Enterprise MySql 5.0.92-50 を使用しているため、プロファイリングを行うことができません。これは、私の開発環境とプロファイリングできるテスト VM では発生しないため、スケーリングの問題です。何千ものユーザーをサポートするため、ライブ スキーマは非常に大きくなりますが、それでも接続とほとんどのクエリは数ミリ秒しかかかりません。
大規模なマルチユーザー システムでメモリ ベースの information_schema のクエリに時間がかかる理由を知っている人はいますか?