大規模なデータセットの MySQL クエリ実行時間を最適化するには?

Susan Sarandon
リリース: 2024-11-26 01:38:11
オリジナル
752 人が閲覧しました

How to Optimize MySQL Query Execution Time for Large Datasets?

MySQL クエリ実行時間の最適化

大規模なデータベースを操作する場合、クエリの実行時間は重要な要素になります。そのようなシナリオの 1 つでは、100 万件のレコードを含む Web サイトのデータベースで、クエリの実行時間が過度に長くなりました。以下に示す 1 つのサンプル クエリは、この問題を示しています。

select * from `ratings` order by id limit 499500, 500
ログイン後にコピー

MySQL テーブルで 100 万レコードを処理しても問題は発生しないはずであると信じられていたにもかかわらず、このクエリの実行には一貫して 1 分以上かかりました。 id 列にインデックスを追加しても、この問題は軽減されませんでした。

しかし、このクエリの EXPLAIN プランを調査したところ、クエリがフル テーブル スキャン アプローチを使用していることが判明しました:

explain select * from `ratings` order by id limit 499500, 500;
+----+-------------+---------+------+---------------+------+---------+------+---------+----------------+
| id | select_type | table   | type | possible_keys | key  | key_len | ref  | rows    | Extra          |
+----+-------------+---------+------+---------------+------+---------+------+---------+----------------+
|  1 | SIMPLE      | ratings | ALL  | NULL          | NULL | NULL    | NULL | 4718592 | Using filesort |
+----+-------------+---------+------+---------------+------+---------+------+---------+----------------+
ログイン後にコピー

この問題に対処するには、where 句を利用して検索条件を絞り込むことが提案されました。 where 句が追加されると、クエリ プランが変更されました。

explain select * from `ratings` where id>=499501 limit 500;
+----+-------------+---------+-------+---------------+---------+---------+------+---------+-----------------------+
| id | select_type | table   | type  | possible_keys | key     | key_len | ref  | rows    | Extra                 |
+----+-------------+---------+-------+---------------+---------+---------+------+---------+-----------------------+
|  1 | SIMPLE      | ratings | range | PRIMARY       | PRIMARY | 4       | NULL | 4198581 | Using index condition |
+----+-------------+---------+-------+---------------+---------+---------+------+---------+-----------------------+
ログイン後にコピー

この変更により、クエリにインデックス条件アプローチが使用されるようになり、実行時間が大幅に短縮されました。

さらに、次の可能性があります。クエリ実行プロセスでデッドロックが発生する可能性は排除できません。デッドロックを診断するには、SHOW INNODB STATUS コマンドが役立つ場合があります。

以上が大規模なデータセットの MySQL クエリ実行時間を最適化するには?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート