PHPのインタビューのトピック--- 18、MySQLのクエリの最適化のテストサイト

PHPのインタビューのトピック--- 18、MySQLのクエリの最適化のテストサイト

概要

文の要約:

スロークエリ:原因分析のクエリが遅い検索
データアクセス:データAccessクエリの最適化プロセス
長い文章は:長いハードのクエリを最適化
特定の種類:クエリの最適化の具体的な種類

 

これでクエリがどのように1、mysqlのスロークエリ?

スロークエリログ:遅くログを記録します、あなたは分析ツールをPT-クエリダイジェスト使うことができるもの
声明を説明:あなたは、単一のクエリ文の効率を分析することができます
ショープロフィール、ショーのステータスは、show PROCESSLISTその他の文:スロークエリの実行だけでなく、メッセージや他の様々な状況

 

録音スロークエリログ:これらのスロークエリ記録
分析クエリーログを:直接、これは時間と労力の多くの廃棄物である、スロークエリログ分析を開けないでください、あなたは分析のためにPT-クエリ・ダイジェストのツールを使用することができます

ショープロフィールを使用します。setプロファイリング= 1;オープン、すべての文は、一時テーブルを格納するサーバー上で実行に費やした時間を検出します
クエリー一時テーブルのIDのプロファイルを示しています。各プロファイルには、時間を照会することができますが、一時的なテーブルを記録過ごし

ショーのステータスを使用します。show状況はいくつかを返します。カウンター、すべてのサーバレベルの数のグローバルステータスビューを表示する
ショーPROCESSLISTを使用した:異常な状態または機能で多数のスレッドがあるかどうか
について説明し使用しては:単一のSQL文の分析を

 

2、どのようにデータアクセスMySQLのクエリ処理を最適化するには?

希望と列の条件でインデックス行、側面:ちょうど行と列を取る必要があります試してみてください


あまりにも多くのアクセスデータクエリのパフォーマンスの低下は、につながる
アプリケーション内のデータが必要以上に多くのを取得し、あまりにも多くの行または列の可能性があるか否かを判断
MySQLサーバが不要なデータラインを大量に分析するかどうかを確認するために


スキャン追記するかどうかを
分析することを説明し使用して:発見クエリが大量のデータをスキャンする必要があり、わずか数行を返す場合は、以下の最適化技術を介して行くことができる

インデックスに配置されているすべての列で、インデックススキャン範囲を使用して対応する行を、そのストレージエンジンはテーブルに戻って取得する必要はありません。結果を返すことができ
、テーブルデータのパラダイムを変更し、データベースとテーブルの構造を変更することを
オプティマイザは、より最適な方法でクエリを実行することができ、SQL文を書き換えて


、次のSQL文で使用して回避するために
1を、クエリがレコードを必要としない:解決するための制限を使用し
たマルチテーブル、2を戻って、関連するすべての列:A.id、A.name、B.age指定します
。3、常にすべての列を削除します*オプティマイザを選択し、スキャン範囲の最適化インデックスに完了しません
4を、同じデータがクエリを繰り返して、データをキャッシュすることができ、次の直接読み取りキャッシュ

 

3、MySQLのSQL文は、私たちがやって避けるべきですか?

1、クエリは、レコードを必要としない:解決するための制限を使用しました
2、マルチ連想リストは、すべての列を返す:A.id、A.name、B.ageを指定します
3、常にすべての列を削除します。SELECT *オプティマイザは完全なカバレッジの最適化インデックススキャンしません
4は、キャッシュしないでください。繰り返しクエリと同じデータ、データをキャッシュすることができ、次の読み取りキャッシュを直接

 

1、クエリは、レコードを必要としない:解決するための制限を使用して、
すべての列のリターンに関連したマルチテーブル、2:A.id、A.name、B.age指定
常にすべての列を削除し、3:SELECT *オプティマイザは完全なインデックスがカバーしていないだろうスキャンの最適化
4、直接次の読み取りをキャッシュし、データをキャッシュすることができ、同じ照会データを繰り返し

 

4. MySQLのクエリを最適化することは困難どのくらいですか?

セグメンテーションクエリ:同じ小型で複数のクエリへの大規模なクエリ:一時間の10万人が万以上のデータを削除するには削除し、プログラムは、より多くのサーバーのオーバーヘッドの損失のために一時停止します
分解に関するお問合せ:1つの関連のステートメントは、実行するために、複数のSQLに分けることができます

 

セグメンテーションクエリ:同じ小型で複数のクエリへの大規模なクエリ:一回は1000万以上のデータ消去万を削除し、損失プログラムのために中断複数のサーバーのオーバーヘッドの

クエリに関連した分解
のステートメントは、関連付けることができます実行するために、複数のSQLに分け
キャッシュをより効率的にするために
、単一のクエリを実行するために、競争のロックを減らすことができ
、アプリケーション層関連して、それが簡単にデータベースを分割することができます

クエリ効率を飛躍的になります
少ない冗長レコードのクエリ

 

5、mysqlの、私たちは、より複雑なクエリを使用するか、単純なクエリを使用できますか?

内部のお問い合わせ速い、遅いとクライアントとの対話:クライアントへの応答データに比べて、毎秒数百万行のデータをスキャンすることができますMySQLの内部メモリは、非常に遅くなります
必要に応じて単純なクエリの数:使用クエリできるだけ少ないが良いですが、複数の小さなクエリに時々大きなクエリが必要です

 

6、どのようにmysqlのクエリの特定のタイプを最適化するには?

最適化・カウント(*)クエリ:COUNT(*)*、すべての直接統計シリーズのすべての列を無視しますので、カウント数(列名)を使用していません
リレーショナルクエリの最適化:ONまたはUSING句インデックス列を決定し、テーブル内の1つの列のみBY GROUP BYを確保し、ORDER、MySQLは、インデックスを使用することが可能になりますので、
最適化サブクエリ:可能な代替に関連する使用したクエリ
最適化GROUP BYとDISTINCT:これらの2つのクエリがインデックスを最適化するために使用することができ、最も効果的な最適化手法であります


最適化・カウント(*)クエリ
数(*)*すべての列、すべての列をカウントダイレクトを無視し、その数(列名)を使用しないで
MyISAMテーブルには、何のカウント条件(*)非常に高速ではありません。ときがあります条件、統計のMyISAMの数は必ずしも速く、他のテーブルエンジンは以上であるWHERE

近似代替COUNT(*)との近似を説明するクエリを使用することができ
サマリー表の増加
キャッシュ使用して


最適化されたリレーショナルクエリは
上の列に索引があると判断したか句を使用して
GROUP BYを確保し、テーブル内の1列のみ、ORDER BY、MySQLはインデックスを使用することが可能となりますので、


サブクエリを最適化するために
交換すると、関連するクエリを使用して


最適化GROUP BYとDISTINCT
2つのクエリは、インデックスを最適化するために使用することができ、最も効果的な最適化手法である
関連します、ID列の効率的な利用がグループ化されたクエリが高くなります
グループが行っORDER BYを、必要としない場合、MySQLはファイルソートされませんNULL、ORDER BYを使用して
ROLLUPスーパー重合WITHを、アプリケーションプロセスがするように移動させることができる


ページングLIMITの最適化
LIMITをオフセットが大きい場合には、クエリの効率が低いほど、あなたは最後のクエリIDの最大値を記録することができ、次回から直接クエリ 照会するID


最適化UNIONクエリの
UNION ALLより効率的なUNIONを

 

 

 

要約では第二に、コンテンツ

 

 

 

 

ます。https://www.cnblogs.com/Renyi-Fan/p/11078851.htmlで再現

おすすめ

転載: blog.csdn.net/weixin_33720956/article/details/93571705