mysql の select 句と where 句の最適化の概要

不言
リリース: 2019-01-19 10:18:55
転載
3668 人が閲覧しました

この記事は、mysql の select 句と where 句の最適化についてまとめたものです。必要な方は参考にしていただければ幸いです。

データベースの最適化:

1. 最適化は、単一の SQL ステートメント、アプリケーション全体、単一のデータベース サーバー、または複数のレベルで実行できます。ネットワーク化されたデータベース サーバー
#2. データベースのパフォーマンスは、テーブル、クエリ、構成設定などのデータベース レベルのいくつかの要因に依存します。
#3. データベース レベルでの最適化、ハードウェア レベルでの最適化、移植性とパフォーマンスのバランス
4. 適切な構造、適切なデータ型。多数のテーブル (少数の列) で頻繁に更新を実行するアプリケーション。少数のテーブル (複数の列) で大量のデータを分析するアプリケーション。インデックス;
5. 圧縮は InnoDB テーブルおよび読み取り専用 MyISAM テーブルに適用可能です。
6. InnoDB ストレージ エンジンはほとんどのロック問題を処理できます。構成されているメイン メモリ領域は、InnoDB バッファ プールと MyISAM キー キャッシュです。
8. select ステートメントを最適化します。この手法は、where 句の列にインデックスを設定する場合にも適用できます。
結合や外部キーなどの複数の列を参照する場合に重要です。

select where 句の最適化:

1. 関数呼び出しなどのクエリの構造を調整し、結果セットの各行に対して 1 回だけ呼び出します。テーブル内の各行に対して一度だけ呼び出します

2。クエリ内のテーブル全体のスキャンの数を減らします
3。ANALYZE TABLE ステートメントを定期的に使用して、テーブルの統計を最新の状態に保ちます
4。各テーブルに固有のストレージ エンジンのチューニング テクニック、インデックス作成テクノロジ、構成パラメータを理解します。
5. InnoDB テーブルの単一クエリ トランザクションを最適化します。
6. EXPLAIN プランを読み取って調整することで、特定のクエリの内部詳細を調査します。インデックス、WHERE 句、結合句など。
7. MySQL がキャッシュに使用するメモリ領域のサイズとプロパティを調整します。 InnoDB バッファ プール、MyISAM キー キャッシュ、MySQL クエリ キャッシュを効果的に使用することで、#8.where 条件、不要な括弧の削除、定数の折りたたみ、定数条件の削除、インデックスで使用される不要なロジックを削減します##9。
10.count(*) はテーブル情報から直接クエリされます。テーブルが 1 つしかない場合、GROUP BY または集計関数 (COUNT) を使用しない場合も同様です。 ()、MIN () など)、HAVING は WHERE
12 とマージされます。 ORDER BY の場合、WHERE 句は 1 行または空のテーブルに作用します。 GROUP BY 句内のすべての列が同じテーブルに由来する場合、接続時にそのテーブルが優先されます。
14 order by 句と group by 句が異なる場合、または異なるテーブルに由来する場合は、一時テーブルが使用されます。
15. SQL_SMALL_RESULT 修飾子を使用すると、MySQL はメモリ内の一時テーブルを使用します
16. MySQL は、各データ ファイルを参照することなく、インデックスから行を読み取ることができます。行の場合、ジャンプは HAVING 句に一致しない行を渡します。

次のテーブルは定数テーブルとして使用されます:

SELECT * FROM t WHERE primary_key=1;
SELECT * FROM t1,t2  
WHERE t1.primary_key=1 AND t2.primary_key=t1.id;
ログイン後にコピー

次のクエリは非常に高速に実行されます:
SELECT COUNT(*) FROM tbl_name;
SELECT MIN(key_part1),MAX(key_part1) FROM tbl_name;
SELECT MAX(key_part2) FROM tbl_name
  WHERE key_part1=constant;
SELECT ... FROM tbl_name
  ORDER BY key_part1,key_part2,... LIMIT 10;
SELECT ... FROM tbl_name
  ORDER BY key_part1 DESC, key_part2 DESC, ... LIMIT 10;
ログイン後にコピー
インデックス列は数値です。次のクエリはインデックス ツリーのみが使用されます:
SELECT key_part1,key_part2 FROM tbl_name WHERE key_part1=val;
SELECT COUNT(*) FROM tbl_name
  WHERE key_part1=val1 AND key_part2=val2;
  SELECT key_part2 FROM tbl_name GROUP BY key_part1;
ログイン後にコピー

次のクエリはインデックスを使用して並べ替えられた順序でデータを取得します。個別の並べ替えは必要ありません

SELECT ... FROM tbl_name
  ORDER BY key_part1,key_part2,... ;
SELECT ... FROM tbl_name
   ORDER BY key_part1 DESC, key_part2 DESC, ... ;
ログイン後にコピー

以上がmysql の select 句と where 句の最適化の概要の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

関連ラベル:
ソース:cnblogs.com
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
最新の問題
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート
私たちについて 免責事項 Sitemap
PHP中国語ウェブサイト:福祉オンライン PHP トレーニング,PHP 学習者の迅速な成長を支援します!