大きなテーブルで MySQL ステートメントの実行が遅い
大量のレコードを含むデータベースを操作する場合、クエリに時間がかかるのが一般的です実行時間の延長。一例として、
select * from `ratings` order by id limit 499500, 500
のようなクエリがあります。通常、クエリは、数百万のレコードを含むデータベースであっても、迅速に実行される必要があります。この問題に対処するには、クエリのパフォーマンスに影響を与える根本的な要因を理解することが不可欠です。
インデックス作成とエンジンの選択
インデックス作成を使用すると、クエリの速度を大幅に向上させることができます。クエリ、特にクエリに大きなテーブルが含まれる場合。提供されているコード サンプルでは、ステートメント order by id は、結果が id 列でソートされて返されることを示しています。 id 列にインデックスが付けられていない場合、データベースはデータを取得するためにテーブル全体をスキャンする必要があり、大きなテーブルの場合は時間がかかる可能性があります。 id 列にインデックスを追加すると、データベースは完全なテーブル スキャンを実行しなくても、関連する行に直接アクセスできるようになります。
データベース エンジンの選択に関して、提供されている例では MyISAM が使用されていることに注意することが重要です。これは、InnoDB.
Query などの他の利用可能なオプションと比較して制限があるため、現在では一般的に使用されていません。最適化
場合によっては、クエリ自体を変更することでパフォーマンスが大幅に向上することがあります。たとえば、提供されているサンプルのように、大きなオフセットを指定してlimit句を使用する代わりに、where句を使用する方が効率的です。次のクエリはこれを示しています:
select * from `ratings` where id>=499500 limit 500
このクエリは、id 列の主キー インデックスを利用するため高速になり、データベースが関連する行に直接アクセスできるようになります。
デッドロックの排除
さらに、デッドロックの可能性を排除することが重要です。デッドロックは、2 つ以上のプロセスまたはスレッドが互いに保持されているリソースを解放するのを待機し、両方の処理が進行できなくなるときに発生します。特定のシナリオでは、デッドロックがパフォーマンス低下の原因である可能性は低いですが、他の潜在的な問題が除外されているかどうかを検討する価値があります。
インデックス作成、クエリの最適化、データベースなどの要因に対処することによってエンジンを選択すると、大規模なデータベースに対する複雑なクエリの実行時間を大幅に短縮することができます。
以上が大きなテーブルをクエリすると MySQL ステートメントが遅くなるのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。