ホームページ >データベース >mysql チュートリアル >遅い MySQL クエリを最適化してパフォーマンスを向上させ、ディスク I/O を削減するにはどうすればよいですか?
実行時間とディスク書き込みを削減するための MySQL クエリの最適化
MySQL クエリの完了と書き込みに数分かかるため、パフォーマンスの問題が発生しています。実行中のディスク。これは、Web ページの応答性に大きな影響を与える可能性があります。これに対処するために、データ モデリングとインデックスの最適化を伴う解決策を検討します。
あなたが言及した遅いクエリは次のとおりです:
SELECT * FROM poster_prodcat, poster_data, poster_categories WHERE poster_data.apnumber = poster_prodcat.apnumber AND poster_categories.apcatnum = poster_prodcat.apcatnum AND poster_prodcat.apcatnum='623' ORDER BY aptitle ASC LIMIT 0, 32
EXPLAIN 出力によると、クエリは完全なクエリを実行しています。 1,700 万行以上を含む、poster_prodcat テーブルのテーブル スキャン。これが過剰な実行時間の原因となっています。
クエリのパフォーマンスを最適化するには、次の変更を実装できます:
正規化とインデックス作成:
更新されたスキーマの例を次に示します。
CREATE TABLE poster ( poster_id INT UNSIGNED NOT NULL AUTO_INCREMENT, name VARCHAR(255) NOT NULL UNIQUE, PRIMARY KEY (poster_id) ) ENGINE=InnoDB; CREATE TABLE category ( cat_id MEDIUMINT UNSIGNED NOT NULL AUTO_INCREMENT, name VARCHAR(255) NOT NULL UNIQUE, PRIMARY KEY (cat_id) ) ENGINE=InnoDB; CREATE TABLE poster_category ( cat_id MEDIUMINT UNSIGNED NOT NULL, poster_id INT UNSIGNED NOT NULL, PRIMARY KEY (cat_id, poster_id), INDEX (poster_id) -- Clustered composite index ) ENGINE=InnoDB;
データが正規化され、インデックスが作成されると、を実行すると、クエリの実行が大幅に高速化され、実行時間が大幅に短縮されます。
以上が遅い MySQL クエリを最適化してパフォーマンスを向上させ、ディスク I/O を削減するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。