ホームページ > データベース > mysql チュートリアル > 大規模なデータセットで ORDER BY と LIMIT を使用した MySQL SELECT ステートメントが遅いのはなぜですか?どうすれば高速化できますか?

大規模なデータセットで ORDER BY と LIMIT を使用した MySQL SELECT ステートメントが遅いのはなぜですか?どうすれば高速化できますか?

Linda Hamilton
リリース: 2024-11-18 05:09:02
オリジナル
221 人が閲覧しました

Why is my MySQL SELECT statement with ORDER BY and LIMIT slow on a large dataset, and how can I speed it up?

大規模なデータセットを使用すると MySQL ステートメントの実行が遅くなる

大規模なデータベースを操作する場合、クエリの実行時間が問題になることがあります。この記事では、100 万を超えるレコードを持つテーブルに対するクエリの実行に 1 分以上かかる特定のシナリオについて説明します。

問題

次のクエリが引き継いでいたインデックス付きの "id" 列を使用する場合でも、実行に 1 分かかります:

SELECT *
FROM `ratings`
ORDER BY id
LIMIT 499500, 500;
ログイン後にコピー

テーブルには約 100 万のレコードが含まれており、クエリには次の順序が含まれていました。

分析と解決策

クエリとテーブルの構造を調査した結果、実行が遅いことが判明しました。時間は「ファイルソート」操作の使用によるものでした。これは、MySQL が ORDER BY 句に使用する適切なインデックスを見つけられず、メモリ内のテーブル行をソートする必要がある場合に発生します。

この問題を解決するには、WHERE 句の代わりに、より選択的な WHERE 句を使用することが推奨されました。 ORDER BY 句。この場合、次のクエリの実行が大幅に高速になりました:

SELECT *
FROM `ratings`
WHERE id >= 499501
LIMIT 500;
ログイン後にコピー

このクエリは、インデックス付きの "id" 列を使用して並べ替える行を絞り込み、クエリの実行に必要な時間を大幅に短縮しました。

追加の考慮事項

ORDER の代わりに WHERE 句を使用することに注意することが重要ですBY 句は常に可能または実用的であるとは限りません。このような場合、追加のインデックスの作成やデータベース構造の最適化など、他の最適化が必要になる場合があります。さらに、潜在的なデッドロックもパフォーマンス低下の原因として除外する必要があります。

以上が大規模なデータセットで ORDER BY と LIMIT を使用した MySQL SELECT ステートメントが遅いのはなぜですか?どうすれば高速化できますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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