ホームページ >データベース >mysql チュートリアル >データベースの再構築により、遅い MySQL クエリを最適化し、ディスク I/O を排除するにはどうすればよいですか?

データベースの再構築により、遅い MySQL クエリを最適化し、ディスク I/O を排除するにはどうすればよいですか?

Susan Sarandon
Susan Sarandonオリジナル
2024-12-30 14:44:171004ブラウズ

How Can Database Restructuring Optimize a Slow MySQL Query and Eliminate Disk I/O?

実行時間を短縮し、ディスク I/O を排除するための MySQL クエリの最適化

典型的な Web アプリケーション シナリオでは、データベース クエリのパフォーマンスが応答性の高いユーザー エクスペリエンスを維持するために重要です。この記事では、実行時間が遅くなり、Web サイトのパフォーマンスが低下する特定の MySQL クエリについて説明します。

問題のクエリは、「poster_data」、「poster_categories」、および「poster_prodcat」の 3 つのテーブルを結合します。これは、「poster_prodcat」テーブルの特定の条件に基づいてテーブルからデータを取得することを目的としています。クエリ実行プランから、「poster_prodcat」テーブルとそのディスクへの書き込みの関与が明らかになり、非効率なデータ取得が示されました。

パフォーマンスの問題に対処するために、データベースとクエリの再構築を伴う代替アプローチを検討しました。具体的には、「poster」、「category」、「poster_category」という名前の新しいテーブルを作成しました。 「poster_category」テーブルは、(cat_id,poster_id) 列にクラスター化複合インデックスを使用して設計されました。

この新しいスキーマを使用して、元のクエリを次のように書き直しました。

SELECT
    p.*,
    c.*
FROM
    poster_category pc
INNER JOIN
    category c ON pc.cat_id = c.cat_id
INNER JOIN
    poster p ON pc.poster_id = p.poster_id
WHERE
    pc.cat_id = 623
ORDER BY
    p.name
LIMIT
    32;

書き換えられたクエリの EXPLAIN プランにより、パフォーマンスが大幅に向上していることがわかります。クエリはインデックスを効果的に使用するようになり、ディスク I/O の必要性が減り、実行時間が最小限に抑えられます。

以上がデータベースの再構築により、遅い MySQL クエリを最適化し、ディスク I/O を排除するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。