まだ*を選択しますか?

まだ*を選択しますか?

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

では、データベース 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 スレッド間の同期と排他制御の知識ポイントのまとめ

推薦する

React でカレンダー コンポーネントを構築するためのステップ バイ ステップ ガイド

目次事業背景テクノロジーの活用技術的な問題デザインのアイデア😱 困惑と苦痛に満ちた顔🙄考え始める🌲デ...

JavaScriptの詳細な分析と方向の変更方法

目次これ方法オブジェクト内これを隠した厳密モードこれを変更してこれいつものように、まずはコードを見て...

Ubuntu 18.04 は pyenv、pyenv-virtualenv、virtualenv、Numpy、SciPy、Pillow、Matplotlib をインストールします

1. 現在、Pythonのバージョン管理ツールは数多く存在します。その中でも比較的使いやすいのがPy...

WeChatアプレットは水平および垂直スクロールを実現

この記事の例では、WeChatアプレットの水平スクロールと垂直スクロールを実現するための具体的なコー...

JS を使用してデータ型を決定する 4 つの方法

目次序文1. 型2. インスタンス3. コンストラクター詳細: 4. 文字列要約する序文Javasc...

Apache SkyWalkingのセルフモニタリングを素早く有効にする方法を説明します

1. Prometheusテレメトリデータを有効にするデフォルトでは、テレメトリは次のように無効にな...

Bootstrapはカルーセルの効果を実現します

この記事では、カルーセルマップの効果を実現するためのBootstrapの具体的なコードを参考までに共...

Vue.jsはシンプルな折りたたみパネルを実装します

この記事では、Vue.jsの具体的なコードを共有して、シンプルな折りたたみパネルを実装する例を紹介し...

現在のブラウザが JavaScript でヘッドレス ブラウザであるかどうかを検出する方法

目次ヘッドレスブラウザとは何ですか?なぜ「ヘッドレス」ブラウザと呼ばれるのでしょうか?ヘッドレスブラ...

Docker Composeオーケストレーションツールの詳細な説明

Docker の作成Docker Compose は、複数の Docker コンテナを定義して実行す...

Vue を使用してモバイル APK プロジェクトを完了することについての簡単な説明

目次基本設定エントリファイル main.jsアプリ.vue表紙ヘッダー検索バー本体当プロジェクトでは...

Linux入力サブシステムフレームワーク原理の分析

入力サブシステムフレームワークLinux 入力サブシステムは、上から下に向かって、入力サブシステム ...

Blazor における CSS 分離の問題

1. 環境VS 2019 16.9.0 プレビュー 1.0 .NET SDK 5.0.100 2. ...

フレックスレイアウトではサブアイテムの高さを維持できる

Flex レイアウトを使用すると、水平に配置すると、すべての子項目の高さが同じになることがわかります...

ubuntu16.04 で nginx を完全にアンインストールするための関連コマンド

nginx の概要nginx は、無料のオープンソースの高性能 HTTP サーバーおよびリバース プ...