ホームページ データベース mysql チュートリアル SQL ステートメントの最適化戦略の概要

SQL ステートメントの最適化戦略の概要

Jan 28, 2020 pm 10:05 PM
SQL文 導入 最適化 戦略

SQL ステートメントの最適化戦略の概要

1. フル テーブル スキャンの回避#​​

##クエリを最適化するには、フル テーブル スキャンを回避してください。まず、Create の場所と順序を検討します。関連する列のインデックス。

2. null 値の判断を避ける

where 句内のフィールドの null 値の判断を避けるようにしてください。そうしないと、エンジンがインデックスの使用を断念します。

select id from t where num is null
ログイン後にコピー

のようにテーブル全体のスキャンを実行します。 num にデフォルト値 0 を設定し、テーブルの num 列に null 値がないことを確認してから、次のようにクエリを実行します。

select id from t where num=0
ログイン後にコピー

(無料の学習ビデオ チュートリアルの推奨事項: mysql ビデオ チュートリアル )

3. 不平等な価値判断を避ける

where 句 != または <> 演算子での使用は避けてください。そうしないと、エンジンはインデックスの使用を断念し、テーブル全体のスキャンを実行します。

4. or ロジックの使用を避ける

条件を接続するために where 句で or を使用することは避けてください。エンジンはインデックスの使用を断念し、次のようなテーブル全体のスキャンを実行します:

select id from t where num=10 or num=20
ログイン後にコピー

次のようにクエリできます:

select id from t where num=10
union all
select id from t where num=20
ログイン後にコピー

5. ロジック内ではなく、ロジック内で使用します。注意あり

in と not in も注意して使用する必要があります。そうしないと、次のようなテーブル全体のスキャンが発生します。

select id from t1 where num in(select id from t2 where id > 10)
ログイン後にコピー

このとき、外部クエリはスキャンします。インデックスを使用せずにテーブル全体を検索します。これは次のように変更できます。

select id from t1,(select id from t1 where id > 10)t2 where t1.id = t2.id
ログイン後にコピー

この時点では、インデックスが使用されるため、クエリの効率が大幅に向上します。

6. ファジー クエリに注意してください

次のクエリでもテーブル全体のスキャンが発生します:

select id from t where name like &#39;%abc%&#39;
ログイン後にコピー

ファジー クエリが必要な条件の場合、「abc%」のような Select id from t where name を使用してファジー クエリを実装できます。この場合、インデックスが使用されます。ヘッダー照合が必要なロジックの場合は、全文検索エンジン (Elastic search、Lucene、Solr など) を使用することをお勧めします。

7. クエリ条件でのフィールド計算の回避#​​##where 句のフィールドでの式操作は避けるようにしてください。これにより、エンジンがクエリの使用を断念します。インデックス、フルテーブルスキャン。例:

select id from t where num/2=100
ログイン後にコピー

select id from t where num=100*2
ログイン後にコピー

8 に変更する必要があります。クエリ条件内のフィールドに対して関数操作を実行することは避けてください。

の使用は避けるようにしてください。 where 句 フィールド内のフィールドに対して関数操作が実行されます。これにより、エンジンはインデックスの使用を断念し、テーブル全体のスキャンを実行します。例:

select id from t where substring(name,1,3)=&#39;abc&#39;--name 以abc 开头的id
ログイン後にコピー

select id from t where name like &#39;abc%&#39;
ログイン後にコピー

9 に変更する必要があります。WHERE の左側の


に注意してください。文中の「=」の左側では関数、算術演算、またはその他の式演算を実行しないでください。そうしないと、システムがインデックスを正しく使用できない可能性があります。

10. 複合インデックスの使用

インデックス フィールドを条件として使用する場合、インデックスが複合インデックスの場合は、インデックスの最初のフィールドを使用する必要があります。条件として使用される場合にのみ、システムはインデックスを使用できます。それ以外の場合、インデックスは使用されません。また、フィールドの順序はインデックスの順序とできる限り一致する必要があります。

11. 異議のないクエリを定義しないでください。

無意味なクエリを作成しないでください。たとえば、空のテーブル構造を生成する必要がある場合:

select col1,col2 into #t from t where 1=0
ログイン後にコピー

このタイプのコード結果セットはシステム リソースを消費しますが、

create table #t(...)
ログイン後にコピー

12 に変更する必要があります。多くの場合、exists


選択する:

select num from a where num in(select num from b)
ログイン後にコピー

次のステートメントに置き換えます:

select num from a where exists(select 1 from b where num=a.num)
ログイン後にコピー

13. インデックスも失敗する可能性があります

并不是所有索引对查询都有效,SQL 是根据表中数据来进行查询优化的,当索引列有大量数据重复时,SQL 查询可能不会去利用索引,如一表中有字段sex,male、female 几乎各一半,那么即使在sex 上建了索引也对查询效率起不了作用。

14、表格字段类型选择

尽量使用数字型字段,若只含数值信息的字段尽量不要设计为字符型,这会降低查询和连接的性能,并会增加存储开销。

这是因为引擎在处理查询和连接时会逐个比较字符串中每一个字符,而对于数字型而言只需要比较一次就够了。尽可能的使用varchar 代替char ,因为首先可变长度字段存储空间小,可以节省存储空间,其次对于查询来说,在一个相对较小的字段内搜索效率显然要高些。

15、查询语法中的字段

任何地方都不要使用select * from t ,用具体的字段列表代替“*”,不要返回用不到的任何字段。

16、索引无关优化

不使用*、尽量不使用union,union all 等关键字、尽量不使用or 关键字、尽量使用等值判断。表连接建议不超过5 个。如果超过5 个,则考虑表格的设计。(互联网应用中)表连接方式使用外联优于内联。外连接有基础数据存在。

如:A left join B,基础数据是A。A inner join B,没有基础数据的,先使用笛卡尔积完成全连接,在根据连接条件得到内连接结果集。

大数据量级的表格做分页查询时,如果页码数量过大,则使用子查询配合完成分页逻辑。

Select * from table limit 1000000, 10
Select * from table where id in (select pk from table limit100000, 10)
ログイン後にコピー

相关文章教程推荐:mysql教程

以上がSQL ステートメントの最適化戦略の概要の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover

AI Clothes Remover

写真から衣服を削除するオンライン AI ツール。

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

Video Face Swap

Video Face Swap

完全無料の AI 顔交換ツールを使用して、あらゆるビデオの顔を簡単に交換できます。

ホットツール

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

SublimeText3 中国語版

SublimeText3 中国語版

中国語版、とても使いやすい

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

神レベルのコード編集ソフト(SublimeText3)

Windows 7にMySQLをインストールできますか? Windows 7にMySQLをインストールできますか? Apr 08, 2025 pm 03:21 PM

はい、MySQLはWindows 7にインストールできます。MicrosoftはWindows 7のサポートを停止しましたが、MySQLは引き続き互換性があります。ただし、インストールプロセス中に次のポイントに注意する必要があります。WindowsのMySQLインストーラーをダウンロードしてください。 MySQL(コミュニティまたはエンタープライズ)の適切なバージョンを選択します。インストールプロセス中に適切なインストールディレクトリと文字セットを選択します。ルートユーザーパスワードを設定し、適切に保ちます。テストのためにデータベースに接続します。 Windows 7の互換性とセキュリティの問題に注意してください。サポートされているオペレーティングシステムにアップグレードすることをお勧めします。

SQLステートメントを使用してSQL Serverでテーブルを作成する方法 SQLステートメントを使用してSQL Serverでテーブルを作成する方法 Apr 09, 2025 pm 03:48 PM

SQL ServerでSQLステートメントを使用してテーブルを作成する方法:SQL Server Management Studioを開き、データベースサーバーに接続します。データベースを選択してテーブルを作成します。作成テーブルステートメントを入力して、テーブル名、列名、データ型、制約を指定します。 [実行]ボタンをクリックしてテーブルを作成します。

SQL注射を判断する方法 SQL注射を判断する方法 Apr 09, 2025 pm 04:18 PM

SQLインジェクションを判断する方法には、疑わしい入力の検出、元のSQLステートメントの表示、検出ツールの使用、データベースログの表示、および浸透テストの実行が含まれます。注入が検出された後、脆弱性のパッチを適用し、パッチを確認し、定期的に監視し、開発者の意識を向上させるための措置を講じます。

SQLステートメントを確認する方法 SQLステートメントを確認する方法 Apr 09, 2025 pm 04:36 PM

SQLステートメントを確認する方法は次のとおりです。SyntaxChecking:SQL EditorまたはIDEを使用します。論理チェック:テーブル名、列名、条件、およびデータ型を確認します。パフォーマンスチェック:説明または分析を使用してインデックスを確認し、クエリを最適化します。その他のチェック:変数、許可、およびテストクエリを確認します。

MySQLはロックテーブルを最適化しますか MySQLはロックテーブルを最適化しますか Apr 08, 2025 pm 01:51 PM

MySQLは、共有ロックと排他的ロックを使用して並行性を管理し、テーブルロック、ロウロック、ページロックの3つのロックタイプを提供します。 Row Locksは並行性を向上させ、for Updateステートメントを使用して排他的なロックを行に追加します。悲観的なロックは競合を想定し、楽観的なロックはバージョン番号を介してデータを判断します。一般的なロックテーブルの問題は、スロークエリとしてマニフェストします。ShowProcessListコマンドを使用して、ロックが保持しているクエリを表示します。最適化測定には、適切なインデックスの選択、トランザクションスコープの削減、バッチ操作、およびSQLステートメントの最適化が含まれます。

mysqlは支払う必要がありますか mysqlは支払う必要がありますか Apr 08, 2025 pm 05:36 PM

MySQLには、無料のコミュニティバージョンと有料エンタープライズバージョンがあります。コミュニティバージョンは無料で使用および変更できますが、サポートは制限されており、安定性要件が低く、技術的な能力が強いアプリケーションに適しています。 Enterprise Editionは、安定した信頼性の高い高性能データベースを必要とするアプリケーションに対する包括的な商業サポートを提供し、サポートの支払いを喜んでいます。バージョンを選択する際に考慮される要因には、アプリケーションの重要性、予算編成、技術スキルが含まれます。完璧なオプションはなく、最も適切なオプションのみであり、特定の状況に応じて慎重に選択する必要があります。

SQLステートメントで3つのテーブルを接続する方法に関するチュートリアルを書く方法 SQLステートメントで3つのテーブルを接続する方法に関するチュートリアルを書く方法 Apr 09, 2025 pm 02:03 PM

この記事では、SQLステートメントを使用して3つのテーブルに参加する詳細なチュートリアルを紹介し、読者にさまざまなテーブルのデータを効果的に相関させる方法を学習するよう指導します。例と詳細な構文の説明を使用して、この記事では、SQLのテーブルの参加手法を習得して、データベースから関連情報を効率的に取得できるようにします。

SQLが行を削除した後にデータを回復する方法 SQLが行を削除した後にデータを回復する方法 Apr 09, 2025 pm 12:21 PM

データベースから直接削除された行を直接回復することは、バックアップまたはトランザクションロールバックメカニズムがない限り、通常不可能です。キーポイント:トランザクションロールバック:トランザクションがデータの回復にコミットする前にロールバックを実行します。バックアップ:データベースの定期的なバックアップを使用して、データをすばやく復元できます。データベーススナップショット:データベースの読み取り専用コピーを作成し、データが誤って削除された後にデータを復元できます。削除ステートメントを使用して注意してください:誤って削除されないように条件を慎重に確認してください。 WHERE句を使用します:削除するデータを明示的に指定します。テスト環境を使用:削除操作を実行する前にテストします。

See all articles