検索
ホームページデータベースmysql チュートリアル遅い MySQL SELECT クエリを最適化してパフォーマンスを向上させ、ディスク領域の使用量を削減するにはどうすればよいですか?

How Can I Optimize a Slow MySQL SELECT Query to Improve Performance and Reduce Disk Space Usage?

パフォーマンスとディスク容量削減のための MySQL 選択クエリの最適化

実行に数分かかる遅い MySQL クエリは、直面する一般的なパフォーマンスの問題です開発者による。このシナリオでは、クエリは 3 つのテーブルからデータを取得して Web ページを表示します。 EXPLAIN コマンドを使用して調査したところ、クエリが中間結果をディスクに書き込んでいるため、重大なパフォーマンスのボトルネックが発生していることが判明しました。

クエリを最適化するために、次のような包括的なアプローチが採用されました。

テーブル構造分析

クエリでは、poster_data、poster_categories、poster_prodcat の 3 つのテーブルを使用しました。 Poster_data には個々のポスターに関する情報が含まれており、poster_categories にはすべてのカテゴリ (映画、アートなど) がリストされています。 Poster_prodcat は、ポスター ID と関連するカテゴリを保持しました。主なボトルネックは、poster_prodcat で特定されました。これには、1,700 万を超える行と、フィルタリングされている特定のカテゴリの多数の結果 (約 400,000) がありました。

インデックスの最適化

EXPLAIN 出力により、クエリに最適なインデックスが作成されておらず、非効率なデータ アクセスと実行速度の低下につながっていることが明らかになりました。主な問題は、フィルタリングに使用される poster_prodcat.apcatnum 列にインデックスが存在しないことでした。インデックスがないと、MySQL オプティマイザはフル テーブル スキャンに頼ったため、過剰なディスク I/O と長い実行時間が発生しました。

クエリ リライト

パフォーマンスに対処するためこの問題が解決されたため、クエリはより効率的なアプローチを使用して書き直されました:

  • 3 つのテーブルは、代わりに INNER JOIN を使用して結合されました。効率の低い SELECT * の
  • WHERE 句は、サブクエリの必要性を避け、目的のカテゴリで直接フィルタリングできるように簡素化されました。
  • ORDER BY 句は、大規模なデータセットの不必要な並べ替えを防ぐためのクエリ。

一時テーブル作成

ディスク領域の使用量の問題を軽減するために、最適化されたクエリがさらに変更され、中間結果を格納する一時テーブルが作成されました。このアプローチにより、クエリがディスクへのデータの書き込みをバイパスできるようになり、パフォーマンスが大幅に向上しました。

追加の最適化

主な最適化とは別に、さらに強化するためにいくつかの追加の対策が実装されました。クエリのパフォーマンス:

  • LIMIT 句を使用した結果の制限: 元のクエリには制限がありませんでした。 Web ページに必要のない多数の結果が返される可能性があります。
  • 結果のキャッシュ: 一時テーブルは MEMORY エンジンを使用して作成され、高速アクセスのためにデータをメモリ内に保持します。

結論

インデックス作成、クエリ構造、一時テーブルの使用状況に対処することで、元のクエリが最適化され、パフォーマンスが向上し、ディスク領域の使用量が削減されました。この最適化により、実行時間が大幅に短縮され、Web ページ生成の応答性が大幅に向上しました。

以上が遅い MySQL SELECT クエリを最適化してパフォーマンスを向上させ、ディスク領域の使用量を削減するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
MySQLのBLOBデータ型:開発者の詳細な概要MySQLのBLOBデータ型:開発者の詳細な概要May 07, 2025 pm 05:41 PM

blobdatatypesinmysqlareusedlarginglaredatalikeimagesorudio.1)useblobtypes(tinyblobtolongblob)Basedatasizeneeds。 2)storeblobsin perplate petooptimize performance.3)scondididididididididersxternalストレージBlob Romanaデータベースindimprovebackupe

コマンドラインからMySQLにユーザーを追加する方法コマンドラインからMySQLにユーザーを追加する方法May 07, 2025 pm 05:01 PM

toadduserstomysqlfromthecommandline、loginasroot、thenusecreateuser'username '@' host'ident'ident'identifidedby'password '; tocreateanewuser.grantpermissions with grantpermissions with grantalgegesondatabase

mysqlの文字列データ型は何ですか?詳細な概要mysqlの文字列データ型は何ですか?詳細な概要May 07, 2025 pm 03:33 PM

mysqlofferseightStringDatatypes:char、varchar、binary、varbinary、blob、text、enum、andset.1)charisfixed-length、yealforconsistent datalikecountrycodes.2)varcharisvariable length、efficational forvaryingdatalikenames.3)binaryandvanterbinarydata a similati

MySQLにユーザーを追加するための究極のガイドMySQLにユーザーを追加するための究極のガイドMay 07, 2025 pm 03:29 PM

toaddauserinmysql、usethecreateuserstatement.1)usecreateuser'newuser '@' localhost'ident'identifidedby'password '; tocreateauser.2)exestrongPolicieswithieswithieSwithvalidate_passwordworuginsettings

MySQLのストアドプロシージャとは何ですか?MySQLのストアドプロシージャとは何ですか?May 01, 2025 am 12:27 AM

ストアドプロシージャは、パフォーマンスを向上させ、複雑な操作を簡素化するためのMySQLのSQLステートメントを事前に拡大します。 1。パフォーマンスの改善:最初のコンピレーションの後、後続の呼び出しを再コンパイルする必要はありません。 2。セキュリティの改善:許可制御を通じてデータテーブルアクセスを制限します。 3.複雑な操作の簡素化:複数のSQLステートメントを組み合わせて、アプリケーションレイヤーロジックを簡素化します。

クエリキャッシュはMySQLでどのように機能しますか?クエリキャッシュはMySQLでどのように機能しますか?May 01, 2025 am 12:26 AM

MySQLクエリキャッシュの実用的な原則は、選択クエリの結果を保存することであり、同じクエリが再度実行されると、キャッシュされた結果が直接返されます。 1)クエリキャッシュはデータベースの読み取りパフォーマンスを改善し、ハッシュ値を使用してキャッシュされた結果を見つけます。 2)単純な構成、mysql構成ファイルでquery_cache_typeとquery_cache_sizeを設定します。 3)SQL_NO_CACHEキーワードを使用して、特定のクエリのキャッシュを無効にします。 4)高周波更新環境では、クエリキャッシュがパフォーマンスボトルネックを引き起こし、パラメーターの監視と調整を通じて使用するために最適化する必要がある場合があります。

他のリレーショナルデータベースでMySQLを使用することの利点は何ですか?他のリレーショナルデータベースでMySQLを使用することの利点は何ですか?May 01, 2025 am 12:18 AM

MySQLがさまざまなプロジェクトで広く使用されている理由には、次のものがあります。1。複数のストレージエンジンをサポートする高性能とスケーラビリティ。 2。使いやすく、メンテナンス、シンプルな構成とリッチツール。 3。豊富なエコシステム、多数のコミュニティとサードパーティのツールサポートを魅了します。 4。複数のオペレーティングシステムに適したクロスプラットフォームサポート。

MySQLのデータベースアップグレードをどのように処理しますか?MySQLのデータベースアップグレードをどのように処理しますか?Apr 30, 2025 am 12:28 AM

MySQLデータベースをアップグレードする手順には次のものがあります。1。データベースをバックアップします。2。現在のMySQLサービスを停止します。3。MySQLの新しいバージョンをインストールします。アップグレードプロセス中に互換性の問題が必要であり、Perconatoolkitなどの高度なツールをテストと最適化に使用できます。

See all articles

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover

AI Clothes Remover

写真から衣服を削除するオンライン AI ツール。

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

Video Face Swap

Video Face Swap

完全無料の AI 顔交換ツールを使用して、あらゆるビデオの顔を簡単に交換できます。

ホットツール

SublimeText3 英語版

SublimeText3 英語版

推奨: Win バージョン、コードプロンプトをサポート!

EditPlus 中国語クラック版

EditPlus 中国語クラック版

サイズが小さく、構文の強調表示、コード プロンプト機能はサポートされていません

Safe Exam Browser

Safe Exam Browser

Safe Exam Browser は、オンライン試験を安全に受験するための安全なブラウザ環境です。このソフトウェアは、あらゆるコンピュータを安全なワークステーションに変えます。あらゆるユーティリティへのアクセスを制御し、学生が無許可のリソースを使用するのを防ぎます。

MantisBT

MantisBT

Mantis は、製品の欠陥追跡を支援するために設計された、導入が簡単な Web ベースの欠陥追跡ツールです。 PHP、MySQL、Web サーバーが必要です。デモおよびホスティング サービスをチェックしてください。

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境