複数のテーブルを持つ MySQL データベースでは、テーブルに対するクエリの実行時間は、同じデータベース内の他のすべてのテーブルのサイズの影響を受けますか?
4 に答える
これらのテーブルがクエリに関与しておらず、他のクエリが実行されておらず、テーブルをリンクする制約やトリガーがないことを前提として、他のテーブルがクエリに与える影響は 2 つしか考えられません。
最初の影響は、コンパイル フェーズ中です。このフェーズでは、SQL パーサーがメタデータ テーブルからテーブルと列に関する情報をフェッチします。データベース内のテーブルと列が増えると、クエリのコンパイルが遅くなる可能性があります。
もう 1 つの影響は、ページ テーブルとディスクの断片化です。クリーンなシステムがあり、ページの割り当てと書き込みを開始した場合、ページはおそらくディスク上の連続したページをいっぱいにするでしょう (保証はありませんが、おそらく)。アクセス時に、オペレーティング システムは、要求されたページに隣接する物理ページをプリフェッチしている可能性があります。私が説明した環境では、このプリフェッチされたデータがクエリで使用される可能性があります。
複数のテーブルを持つデータベースでは、ディスクが断片化される可能性が非常に高くなります。この場合、プリフェッチされたハードウェア ページがクエリ内の同じテーブルにある可能性は低くなります。これは、それらが使用されないことを意味するため、次のページを取得するには追加の I/O 要求が必要です。
これをディスクの断片化の観点から説明しましたが、同様のことがページ自体でも発生する可能性があります。テーブルのデータが格納されている物理ページが連続していない可能性があり、同様の結果が得られます。
断片化は、データベースの問題になる可能性があります。実際、データベース内のテーブルの数に関係なく、問題になる可能性があります。ただし、挿入/削除アクティビティが多いテーブルが増えると、断片化が増加する傾向があります。ただし、通常、影響はごくわずかであり、特定の極端な状況でのみ、パフォーマンスが大幅に低下します。
多くのテーブル (およびデータ) を持つ場合、必要なのは HDD スペースだけです。
処理速度は、データベース全体ではなく、テーブルの最適化とサイズ + 実行するクエリによって異なります。
クエリの実行時間は、さまざまなサーバー環境の問題によって影響を受ける可能性があるため、データベースに他の大きなテーブルがあること自体は、無関係なテーブルに対するクエリの速度に影響しないと言う人もいるかもしれませんが、実際にはそれらのテーブルですも照会され、サーバー リソースを消費している可能性があります。もちろん、これはクエリの速度に影響します。
そのテーブル(大きなテーブル)が何らかの接続で他のテーブルに関連している場合にのみ問題になるはずです(外部キー制約は一例です)...そうでない場合、テーブルは独立して動作するはずです。とはいえ、速度の問題を引き起こすほど巨大な単一のテーブルがある場合は、そのデータの一部を小さなサブセットにリファクタリングするための他のソリューションを見つけたいと思うかもしれません。