検索
ホームページデータベースmysql チュートリアルMySQLインデックスの一番左の接頭辞の原則は何ですか?

まえがき

この一番左のプレフィックスインデックスがある理由

結局のところ、mysqlのデータベース構造Bツリーです

実際の問題としては、

インデックス インデックス (a、b、c) には 3 つのフィールドがあります。

クエリ ステートメントを使用します。 select * from table where c = '1' 、SQL ステートメントはインデックス Index

select * from table where b =‘1’ and c ='2' このステートメントはインデックスを経由しませんインデックス

1. 定義

左端のプレフィックス マッチング原則: MySQL が結合インデックスを構築するとき、左端のプレフィックス マッチング原則、つまり左端の優先順位に従います。結合インデックスの左端。

より良い方法 この状況を特定するには、テーブルとインデックスを作成して分析します。

2. 完全なインデックスの順序

テーブルを作成し、ジョイント インデックス。順序が逆であっても識別できます。ただし、そのすべての部分が存在する必要があります。

Create table

CREATE TABLE staffs(
	id INT PRIMARY KEY AUTO_INCREMENT,
	`name` VARCHAR(24) NOT NULL DEFAULT'' COMMENT'姓名',
	`age` INT NOT NULL DEFAULT 0 COMMENT'年龄',
	`pos` VARCHAR(20) NOT NULL DEFAULT'' COMMENT'职位',
	`add_time` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT'入职时间'
)CHARSET utf8 COMMENT'员工记录表';

INSERT INTO staffs(`name`,`age`,`pos`,`add_time`) VALUES('z3',22,'manager',NOW());
INSERT INTO staffs(`name`,`age`,`pos`,`add_time`) VALUES('July',23,'dev',NOW());
INSERT INTO staffs(`name`,`age`,`pos`,`add_time`) VALUES('2000',23,'dev',NOW());

CreateindexALTER TABLE Staffs ADD INDEX Index_staffs_nameAgePos (name,age,pos);

インデックスの順序name-age-pos

インデックスに 1 つがあるかどうかを表示しますインデックスを表示from Staffs;

MySQLインデックスの一番左の接頭辞の原則は何ですか?

##左右の順序を逆にしても実行は同じです

主要なステートメントは次の 3 つの文です

  1. explain select *from Staffs where name='z3' and age=22 and pos='manager';

  2. ##explain select *from pos='manager' and name='z3 ' and age=22;

  3. explain select *from Staffs where age= 22 and pos='manager' and name='z3';

MySQLインデックスの一番左の接頭辞の原則は何ですか?上記 3 つの順序が逆になり、ジョイントがインデックスが使用されます。

主な理由は、MySQL にクエリ オプティマイザーの Explain があるためです。したがって、SQL ステートメント内のフィールドの順序は、SQL ステートメントで定義されたフィールドの順序と同じである必要はありません。クエリ オプティマイザーは、SQL ステートメントが効率的に実行される順序を判断して修正し、最終的に実際の実行プランを生成します。

ジョイント インデックスは任意の順序で使用できます

3. 部分的なインデックスの順序

3.1 正の順序

順序が揃っていれば (腕と脚が欠けていても)、すべて同じです

  1. #explain select *from name=‘z3’;

  2. ##explain select *from name='z3’and age=22;
  3. ##explain select *from 譜表 (name='z3’ and age=22;
型はすべて ref 型ですが、フィールドの長さはわずかに変化します。つまり、定義されている語長が変わります

MySQLインデックスの一番左の接頭辞の原則は何ですか?3.2 順序が乱れています

一部のインデックスの順序が異なる場合順序が狂っています

最初のインデックスのみを確認してください

explain select *from Staffs where name= 'z3';
  1. #中間のインデックスをスキップします

    explain select *from Staffs where name='z3' and pos='manager';
  2. 最後のインデックスのみを確認します

    explain select *from Staffs where pos='manager';
  3. ##正の配列を見つけることができます

欠落している場合腕や脚の場合は、引き続き通常のインデックスを使用します。MySQLインデックスの一番左の接頭辞の原則は何ですか?

中間のインデックスをスキップした場合でも、クエリにインデックスを使用できます

ただし、最後のインデックスのみを確認する場合は

type は all 型で、テーブル全体が直接クエリされます (名前の先頭から一致するものがないため、pos と直接一致すると順序が狂って表示されます)

場合によっては、インデックスを通じてクエリを実行できるため、type がインデックス タイプになることがあります。

index はすべてのインデックス ツリーをスキャンし、all はテーブル全体のディスク データ全体をスキャンします

4. ファジー インデックス

同様のあいまいインデックスでは like ステートメントを使用します

したがって、次の 3 つのステートメント

左端のプレフィックスと結合すると、インデックス付けに範囲またはインデックス タイプが使用されます

explain select *from Staffs where name like '3%';

左端の接頭辞インデックス、タイプはインデックスまたは範囲です

  1. #explain select *from Staffs where name like '%3%'; Type is all, full table query

  2. explain select *from Staffs where name like '%'; 3%';、タイプはすべて、完全なテーブル クエリ

  3. # #5. 範囲インデックス

  4. If 複数のフィールドをクエリする場合、真ん中に範囲があるので、インデックスを削除して真ん中のインデックスを削除することをお勧めします

具体的なアイデアは次のとおりですMySQLインデックスの一番左の接頭辞の原則は何ですか?

建立一张单表

CREATE TABLE IF NOT EXISTS article(
	id INT(10) UNSIGNED NOT NULL PRIMARY KEY AUTO_INCREMENT,
	author_id INT(10) UNSIGNED NOT NULL,
	category_id INT(10) UNSIGNED NOT NULL,
	views INT(10) UNSIGNED NOT NULL,
	comments INT(10) UNSIGNED NOT NULL,
	title VARCHAR(255) NOT NULL,
	content TEXT NOT NULL
);

INSERT INTO article(author_id,category_id,views,comments,title,content)
VALUES
(1,1,1,1,'1','1'),
(2,2,2,2,'2','2'),
(1,1,3,3,'3','3');

经过如下查询:

explain SELECT id, author_id FROM article WHERE category_id = 1 AND comments > 1 ORDER BY views DESC LIMIT 1;

MySQLインデックスの一番左の接頭辞の原則は何ですか?

发现其上面的单表查询,不是索引的话,他是进行了全表查询,而且在extra还出现了Using filesort等问题

所以思路可以有建立其复合索引

具体建立复合索引有两种方式:

  1. create index idx_article_ccv on article(category_id,comments,views);

  2. ALTER TABLE 'article' ADD INDEX idx_article_ccv ( 'category_id , 'comments', 'views' );

MySQLインデックスの一番左の接頭辞の原則は何ですか?

但这只是去除了它的范围,如果要去除Using filesort问题的话,还要将其中间的条件范围改为等于号才可满足

发现其思路不行,所以删除其索引 DROP INDEX idx_article_ccv ON article;

MySQLインデックスの一番左の接頭辞の原則は何ですか?

主要的原因是:

这是因为按照BTree索引的工作原理,先排序category_id,如果遇到相同的category_id则再排序comments,如果遇到相同的comments 则再排序views。

当comments字段在联合索引里处于中间位置时,因comments > 1条件是一个范围值(所谓range),MySQL无法利用索引再对后面的views部分进行检索,即range类型查询字段后面的索引无效。

所以建立复合索引是对的

但是其思路要避开中间那个范围的索引进去

只加入另外两个索引即可create index idx_article_cv on article(category_id, views);

MySQLインデックスの一番左の接頭辞の原則は何ですか?

以上がMySQLインデックスの一番左の接頭辞の原則は何ですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明
この記事は亿速云で複製されています。侵害がある場合は、admin@php.cn までご連絡ください。
MySQL:初心者が習得するための必須スキルMySQL:初心者が習得するための必須スキルApr 18, 2025 am 12:24 AM

MySQLは、初心者がデータベーススキルを学ぶのに適しています。 1.MySQLサーバーとクライアントツールをインストールします。 2。selectなどの基本的なSQLクエリを理解します。 3。マスターデータ操作:テーブルを作成し、データを挿入、更新、削除します。 4.高度なスキルを学ぶ:サブクエリとウィンドウの関数。 5。デバッグと最適化:構文を確認し、インデックスを使用し、選択*を避け、制限を使用します。

MySQL:構造化データとリレーショナルデータベースMySQL:構造化データとリレーショナルデータベースApr 18, 2025 am 12:22 AM

MySQLは、テーブル構造とSQLクエリを介して構造化されたデータを効率的に管理し、外部キーを介してテーブル間関係を実装します。 1.テーブルを作成するときにデータ形式と入力を定義します。 2。外部キーを使用して、テーブル間の関係を確立します。 3。インデックス作成とクエリの最適化により、パフォーマンスを改善します。 4.データベースを定期的にバックアップおよび監視して、データのセキュリティとパフォーマンスの最適化を確保します。

MySQL:説明されている主要な機能と機能MySQL:説明されている主要な機能と機能Apr 18, 2025 am 12:17 AM

MySQLは、Web開発で広く使用されているオープンソースリレーショナルデータベース管理システムです。その重要な機能には、次のものが含まれます。1。さまざまなシナリオに適したInnodbやMyisamなどの複数のストレージエンジンをサポートします。 2。ロードバランスとデータバックアップを容易にするために、マスタースレーブレプリケーション機能を提供します。 3.クエリの最適化とインデックスの使用により、クエリ効率を改善します。

SQLの目的:MySQLデータベースとの対話SQLの目的:MySQLデータベースとの対話Apr 18, 2025 am 12:12 AM

SQLは、MySQLデータベースと対話して、データの追加、削除、変更、検査、データベース設計を実現するために使用されます。 1)SQLは、ステートメントの選択、挿入、更新、削除を介してデータ操作を実行します。 2)データベースの設計と管理に作成、変更、ドロップステートメントを使用します。 3)複雑なクエリとデータ分析は、ビジネス上の意思決定効率を改善するためにSQLを通じて実装されます。

初心者向けのMySQL:データベース管理を開始します初心者向けのMySQL:データベース管理を開始しますApr 18, 2025 am 12:10 AM

MySQLの基本操作には、データベース、テーブルの作成、およびSQLを使用してデータのCRUD操作を実行することが含まれます。 1.データベースの作成:createdatabasemy_first_db; 2。テーブルの作成:createTableBooks(idintauto_incrementprimarykey、titlevarchary(100)notnull、authorvarchar(100)notnull、published_yearint); 3.データの挿入:InsertIntoBooks(タイトル、著者、公開_year)VA

MySQLの役割:WebアプリケーションのデータベースMySQLの役割:WebアプリケーションのデータベースApr 17, 2025 am 12:23 AM

WebアプリケーションにおけるMySQLの主な役割は、データを保存および管理することです。 1.MYSQLは、ユーザー情報、製品カタログ、トランザクションレコード、その他のデータを効率的に処理します。 2。SQLクエリを介して、開発者はデータベースから情報を抽出して動的なコンテンツを生成できます。 3.MYSQLは、クライアントサーバーモデルに基づいて機能し、許容可能なクエリ速度を確保します。

MySQL:最初のデータベースを構築しますMySQL:最初のデータベースを構築しますApr 17, 2025 am 12:22 AM

MySQLデータベースを構築する手順には次のものがあります。1。データベースとテーブルの作成、2。データの挿入、および3。クエリを実行します。まず、createdAtabaseおよびcreateTableステートメントを使用してデータベースとテーブルを作成し、InsertINTOステートメントを使用してデータを挿入し、最後にSelectステートメントを使用してデータを照会します。

MySQL:データストレージに対する初心者向けのアプローチMySQL:データストレージに対する初心者向けのアプローチApr 17, 2025 am 12:21 AM

MySQLは、使いやすく強力であるため、初心者に適しています。 1.MYSQLはリレーショナルデータベースであり、CRUD操作にSQLを使用します。 2。インストールは簡単で、ルートユーザーのパスワードを構成する必要があります。 3.挿入、更新、削除、および選択してデータ操作を実行します。 4. Orderby、Where and Joinは複雑なクエリに使用できます。 5.デバッグでは、構文をチェックし、説明を使用してクエリを分析する必要があります。 6.最適化の提案には、インデックスの使用、適切なデータ型の選択、優れたプログラミング習慣が含まれます。

See all articles

ホット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衣類リムーバー

AI Hentai Generator

AI Hentai Generator

AIヘンタイを無料で生成します。

ホットツール

MinGW - Minimalist GNU for Windows

MinGW - Minimalist GNU for Windows

このプロジェクトは osdn.net/projects/mingw に移行中です。引き続きそこでフォローしていただけます。 MinGW: GNU Compiler Collection (GCC) のネイティブ Windows ポートであり、ネイティブ Windows アプリケーションを構築するための自由に配布可能なインポート ライブラリとヘッダー ファイルであり、C99 機能をサポートする MSVC ランタイムの拡張機能が含まれています。すべての MinGW ソフトウェアは 64 ビット Windows プラットフォームで実行できます。

SublimeText3 英語版

SublimeText3 英語版

推奨: Win バージョン、コードプロンプトをサポート!

SublimeText3 中国語版

SublimeText3 中国語版

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

SAP NetWeaver Server Adapter for Eclipse

SAP NetWeaver Server Adapter for Eclipse

Eclipse を SAP NetWeaver アプリケーション サーバーと統合します。

PhpStorm Mac バージョン

PhpStorm Mac バージョン

最新(2018.2.1)のプロフェッショナル向けPHP統合開発ツール