ホームページ >バックエンド開発 >PHPチュートリアル >エキスパート体験: MySQL のパフォーマンスを向上させる方法 (1)_PHP チュートリアル
1. 質問の提起
アプリケーションシステム開発の初期段階では、開発データベース内のデータ量が比較的少ないため、クエリ用の SQL ステートメントのさまざまな記述方法によるパフォーマンスの利点と欠点を理解することが困難です。ただし、アプリケーション システムが実際のアプリケーションを送信した後、データベース内のデータが増加するにつれて、システムの応答速度は現在のシステムが解決する必要がある最も重要な問題の 1 つになります。システムの最適化において非常に重要な側面は、SQL ステートメントの最適化です。大量のデータの場合、低品質の SQL ステートメントと高品質の SQL ステートメントの速度の差は数百倍に達することがあります。システムにとって、それは単にその機能を実現できるかどうかだけではなく、システムの使いやすさを向上させるために高品質の SQL ステートメントを作成します。
ほとんどの場合、Oracle はテーブルをより速く走査するためにインデックスを使用し、オプティマイザーは主に定義されたインデックスに基づいてパフォーマンスを向上させます。ただし、SQL 文の where 句に記述された SQL コードが不当である場合、オプティマイザはインデックスを削除し、全テーブル スキャンを使用します。一般に、この種の SQL 文はいわゆる劣った SQL 文です。 SQL ステートメントを作成するときは、オプティマイザーがインデックスを削除する原則を理解しておく必要があります。これは、高パフォーマンスの SQL ステートメントを作成するのに役立ちます。
2. SQL ステートメントを作成するときに注意すべき問題
以下は、特定の SQL ステートメントの where 句を作成するときに注意する必要がある問題について詳しく説明します。これらの where 句では、一部の列にインデックスがあっても、SQL の品質が低いため、システムは SQL ステートメントの実行時にインデックスを使用できず、テーブル全体のスキャンも使用するため、応答速度が非常に遅くなります。削減。
1. IS NULL と IS NOT NULL
null をインデックスとして使用することはできず、null 値を含む列はインデックスに含まれません。インデックスに複数の列がある場合でも、そのうちの 1 つの列に null が含まれている限り、その列はインデックスから除外されます。つまり、列に NULL 値がある場合、その列にインデックスを構築してもパフォーマンスは向上しません。
where 句で is null または is not null を使用するステートメント オプティマイザーはインデックスを使用できません。
2. 列の結合
結合のある列の場合、最終的な結合値が静的な値であっても、オプティマイザーはインデックスを使用しません。例を見てみましょう。従業員テーブル (従業員) が 2 つの列 (FIRST_NAME と LAST_NAME) に格納されているとします。
以下は結合クエリを使用した SQL ステートメントです。
select * fromemployss
where