まだ*を選択しますか?

まだ*を選択しますか?

アプリケーションが牛のように遅い理由は数多くあります。ネットワーク、システム アーキテクチャ、またはデータベースが原因の可能性があります。

では、データベース SQL ステートメントの実行速度を向上させるにはどうすればよいでしょうか?パフォーマンス チューニングはデータベース管理者 (DBA) の仕事だと考える人もいますが、パフォーマンス チューニングはプログラマーにも大きく関係しています。

プログラムに埋め込まれた SQL ステートメントの最適化のヒントをいくつか使用すると、半分の労力で 2 倍の結果を達成できます。

ヒント1:比較演算子を使用するときは「<>」ではなく「=」を使用する

「=」を使用すると、インデックスが使用される可能性が高くなります。

ヒント 2 : クエリ結果が 1 つしかないことが分かっている場合は、「LIMIT 1」を使用します。

「LIMIT 1」は完全なテーブルスキャンを回避でき、対応する結果が見つかるとスキャンは続行されません。

ヒント3 : 列に適切なデータ型を選択する

TINYINT を使用できる場合は、SMALLINT を使用しないでください。SMALLINT を使用できる場合は、INT を使用しないでください。理由はご存じでしょう。ディスクとメモリの消費が少ないほど良いからです。

1.1 Java のように MySQL でブール型データを定義するにはどうすればよいでしょうか?実際、MySQL はブールデータ型を直接定義していません。tinyint(1) としてのみ定義できます。ブール値が 1 の場合は true を表し、ブール値が 2 の場合は false を表します。

1.2 Long データ型は MySQL データベースの bigint データ型に対応します。

ヒント4 : 大きなDELETE、UPDATE、INSERTクエリを複数の小さなクエリに分割する

数十行または数百行の SQL ステートメントを記述できるというのは、非常に印象的だと思いませんか?ただし、パフォーマンスを向上させ、データをより適切に制御するために、クエリを複数の小さなクエリに分割することができます。

ヒント5:結果セットが重複を許可する場合は、UNIONではなくUNION ALLを使用する

UNION ALL は重複を削除しないため、UNION よりも効率的です。

ヒント6 : 同じ結果セットを複数回取得するには、SQL文の一貫性を保つ

この目的は、クエリ バッファを最大限に活用することです。

たとえば、地域と製品 ID に基づいて製品価格を照会する場合、最初の使用法は次のようになります。

同じクエリを 2 回目に実行するときは、上記のステートメントの一貫性を保ってください。たとえば、where ステートメントの id と region の順序を入れ替えないでください。

ヒント 7 : 「SELECT *」の使用を避ける

テーブル内のすべての列をクエリしない場合は、SELECT * の使用を避けてください。これは、テーブル全体のスキャンが実行され、インデックスを効果的に使用できないため、データベース サーバーの負荷と、データベース サーバーとアプリケーション クライアント間のネットワーク IO オーバーヘッドが増加するためです。

ヒント8: WHERE句ではできるだけインデックスを使用する

すべての列ではなく、ただ「ベストを尽くす」だけです。インデックスが多すぎるとパフォーマンスが低下する可能性があるため、ローカルの状況に適応し、実際の状況に基づいて調整する必要があります。

ヒント9: JOIN句ではできるだけインデックスを使用する

繰り返しますが、これはすべての列ではなく、単に「最善を尽くす」だけです。

ヒント10: ORDER BY列は可能な限りインデックス化すべきである

ORDER BY 列にインデックスを付けるとパフォーマンスも向上します。

ヒント11:ページングロジックを実装するにはLIMITを使用する

パフォーマンスが向上するだけでなく、データベースとアプリケーション間の不要なネットワーク転送も削減されます。

ヒント12: EXPLAINキーワードを使用して実行プランを表示する

EXPLAIN はインデックスの使用状況とスキャンされた行を調べることができます。

他の

SQL をチューニングする方法は多数あり、同じクエリ結果をさまざまな方法でクエリできます。実際、最も現実的なデータセットとハードウェア環境を備えた開発環境でテストし、それを本番環境にリリースするのが最善の方法です。

上記は、編集者が紹介したMySql Select *の詳細な統合です。皆様のお役に立てれば幸いです。ご質問がある場合は、メッセージを残してください。編集者がすぐに返信します。また、123WORDPRESS.COM ウェブサイトをサポートしてくださっている皆様にも感謝申し上げます。

以下もご興味があるかもしれません:
  • Mybatis Select Countの戻り値の型の紹介(*)
  • クエリSELECT * FROM __InstanceModificationEvent WITHINによるイベントフィルタ
  • Select count(*)、Count(1)、Count(column)の違いと実行方法
  • SQL Server における Select count(*) と Count(1) の違いと実行方法
  • sp_who ソリューションから * を選択
  • MySQL が SELECT の使用を推奨しない理由 *

<<:  ウェブ音楽プレーヤーを実現する js

>>:  Linux スレッド間の同期と排他制御の知識ポイントのまとめ

推薦する

MySQL トランザクション分離はどのように実現されますか?

目次同時シナリオ書き込む読む読む読み取り-書き込みと書き込み-読み取りMySQL のロック行レベルロ...

体験したい17 404ページ

404 を避けるべきだとどうして言えるのでしょうか? その理由は、ほとんどの 404 ページが粗雑す...

mysqlは時間を自動的に追加し、時間を自動的に追加および更新する操作を実装します

時間フィールドは、データベースの使用時によく使用されます。よく使われるのは作成時間と更新時間です。し...

フロントエンドの vue+express ファイルのアップロードとダウンロードの例

新しいserver.jsを作成する糸初期化 -y 糸を追加エクスプレスノードモン -D var ex...

show processlist コマンドによる MySQL パフォーマンス検査の説明

show processlist コマンドは非常に便利です。MySQL の実行が 50% 以上になる...

CSS と HTML とフロントエンド テクノロジーのレイヤー図

JavascriptとDOMの関係は非常に曖昧で、CSSやHTMLのフロントエンド技術層も理解してい...

MySQLデータベースを操作するためのコマンドラインツールmycliの簡単な紹介

GitHub にはあらゆる種類の魔法のツールがあります。今日、私はデータベースを操作するためのコマン...

mysql インストーラ コミュニティ 8.0.16.0 のインストールと構成のグラフィック チュートリアル

mysqlインストーラコミュニティ8.0.16.0インストールグラフィックチュートリアル、参考までに...

MySQLループは数千万のデータを挿入する

1. テストテーブルを作成する テーブル `mysql_genarate` を作成します ( `id...

MySQL の昇順および降順データソートの実装

データの昇順、降順ソート1. フィールド名による単一フィールドのソート順機能:どのフィールドを基準に...

Linux でユーザーにルート権限を追加する方法の概要

1. ユーザーを追加します。まず、adduser コマンドを使用して共通ユーザーを追加します。コマン...

Dockerコンテナのエクスポートとインポートの例

目次DockerコンテナのエクスポートDockerコンテナのインポ​​ートこの記事では主に、コンテナ...

Vueはドラッグ可能なツリー構造図を実装します

目次Vue 再帰コンポーネントドラッグイベント最近、Vue を使用して、ドラッグ可能なツリー構造図と...

MySQL データ分析ストレージエンジンの例の説明

目次1. 事例紹介2. システムのデフォルトのストレージエンジンとデフォルトの文字セットを表示する3...

MySQL InnoDB アーキテクチャの概要

目次導入1. MySQLデータベースの全体的なアーキテクチャSQL インターフェースパーサーオプティ...