検索
ホームページデータベースmysql チュートリアルmysqlインデックスとは何ですか? mysql インデックスの関連知識の紹介

この記事では、mysql インデックスとは何ですか? mysql インデックスに関する関連知識の紹介は、必要な友人が参考になれば幸いです。

インデックスとは

インデックスは本の目次のようなものです

インデックスクイック検索に使用されます。インデックスを使用せずに、カラム内の特定の値を持つ行を見つけるには、MySQL は最初のレコードから始めて、関連する行が見つかるまでテーブル全体を読み取る必要があります。テーブルが大きくなるほど、時間がかかります。テーブル内のクエリ対象の列にインデックスがある場合、MySQL はすべてのデータを確認することなく、データ ファイルを検索する場所にすぐにアクセスできるため、時間を大幅に節約できます。

利点と欠点

利点

1. クエリを大幅に高速化します

欠点

1. データが増えると、インデックスの作成と維持に時間がかかります。

#2. インデックスは、データ内のデータを占有します。テーブルには最大オンライン設定もあります。多数のインデックスがある場合、テーブル内のデータを追加、削除、または変更すると、インデックス ファイルがデータ ファイルよりも早くオンライン値に到達する可能性があります。テーブルの場合、インデックスも必要です。 動的メンテナンスによりデータ メンテナンスの速度が低下します。

使用原則とシナリオ

1. インデックスの数は多いほど良いですが、状況によって異なります

2. 頻繁に更新されるテーブルには、インデックスをできるだけ少なくする必要があります。

3. クエリに頻繁に使用されるフィールドのインデックスを作成します。

4. フィールドにはインデックスを使用しないようにします。少量のデータの場合はすべてクエリ データに費やす時間はインデックス データを走査する時間よりも短く、インデックスには最適化効果がありません。

5 異なる値がほとんどないフィールドにはインデックスを使用しないでください。 、男性と女性の 2 つの異なる値のみを持つ性別フィールドなど。

インデックス分類

注: インデックスはストレージ エンジンに実装されています。つまり、異なるストレージ エンジンは異なるインデックスを使用します

MyISAM と InnoDBストレージ エンジン: BTREE インデックスのみをサポートします。つまり、BTREE がデフォルトで使用され、置き換えることはできません。

MEMORY/HEAP ストレージ エンジン: HASH インデックスと BTREE インデックスをサポート

1。インデックス

インデックスには 1 つの列のみが含まれますが、テーブルには複数の単一列インデックスが存在する場合があります。

1.1. 基本的なインデックス タイプ。 MySQL では、純粋にデータをより高速にクエリするためだけに、インデックスが定義されているカラムに重複値や null 値を挿入することを許可する制限はありません。

1.2. 一意のインデックス

インデックス列の値は一意である必要がありますが、NULL 値も許可されます

1.3.特別な一意のインデックスであり、null 値は許可されません。

2. 結合インデックス

テーブル内の複数のフィールドの組み合わせに対してのみ作成されるインデックスです。クエリ条件 インデックスは、これらのフィールドの左側のフィールドが使用される場合にのみ使用されます。結合インデックスを使用する場合は、最適な左プレフィックス ルール

3 に従います。

#フルテキスト インデックス。MyISAM エンジンでのみ使用でき、フルテキスト インデックスは CHAR、VARCHAR、および TEXT タイプのフィールドでのみ使用できます。全文インデックスとは、テキストの山の中で、特定のキーワード (たとえば、「あなたはペンがとても苦手で、二流の人です...) を通じて、そのフィールドが属するレコード行を見つけることができることを意味します。」大きな悪いペン、それは可能かもしれません レコードを見つけます

4. 空間インデックス

空間インデックスは、空間データ型のフィールドに対して確立されるインデックスです。 MySQL の空間データ型、 GEOMETRY 、 POINT、 LINESTRING、 POLYGON。空間インデックスを作成する場合は、SPATIAL キーワードを使用します。要件: エンジンは MyISAM であり、空間インデックスの作成に使用される列は NOT NULL として宣言される必要があります

インデックス メソッド

使用原則: 値が異なる場合が大きく、主に等しい値の検索 (=、、in) に基づいており、値の差が比較的少ない場合は、ハッシュ インデックスの方が効率的な選択肢です。検索の複雑さは O(1) です。 、範囲検索は主に、範囲検索をサポートする B ツリーの方が良い選択です。

B ツリー インデックスB ツリー インデックスには範囲検索と接頭辞検索の機能があり、N 個のノードを持つ B ツリーの場合、レコードを取得する複雑さは O(LogN) です。 。二分探索と同等。

ハッシュ インデックス

ハッシュ インデックスは等しい検索のみを実行できますが、ハッシュ テーブルがどれほど大きくても、検索の複雑さは O(1) です。

インデックスの作成と削除

作成

テーブル作成時に作成されます

CREATE TABLE 表名[字段名 数据类型]  [UNIQUE|FULLTEXT|SPATIAL|...] [INDEX|KEY] [索引名字] (字段名[length])   [ASC|DESC]

例:

CREATE TABLE `NewTable` (
    `id` INT NOT NULL AUTO_INCREMENT,
    `username` VARCHAR (255) NOT NULL,
    `name` VARCHAR (255) NOT NULL,
    `sex` TINYINT NOT NULL DEFAULT 0,
    `address` VARCHAR (255) NULL,
    PRIMARY KEY (`id`), # 主键索引
    INDEX `name` (`name`) USING BTREE, # 普通索引
    UNIQUE INDEX `username` (`username`) USING BTREE # 唯一索引
    INDEX `u_n_a` (`username`,    `name`,`address`) USING BTREE # 组合索引
);

既存のテーブルの作成

ALTER TABLE 表名 ADD[UNIQUE|FULLTEXT|SPATIAL] [INDEX|KEY] [索引名] (索引字段名)[ASC|DESC]
例:

ALTER TABLE `test`
ADD PRIMARY KEY (`id`),  # 主键索引
ADD INDEX `name` (`name`) USING BTREE , # 普通索引
ADD UNIQUE INDEX `username` (`username`) USING BTREE , # 唯一索引
ADD INDEX `u_n_a` (`username`, `name`, `address`) USING BTREE ; # 组合索引

インデックスの削除

ALTER TABLE 表名 DROP INDEX 索引名。

例:

ALTER TABLE `test`
DROP PRIMARY KEY,
DROP INDEX `username`,
DROP INDEX `name`,
DROP INDEX `u_n_a`;

インデックスの更新

最初に削除してからビルド

ALTER TABLE `test`
DROP INDEX `username` ,
ADD UNIQUE INDEX `username1` (`username`) USING BTREE ,
DROP INDEX `name` ,
ADD INDEX `name2` (`name`) USING BTREE ,
DROP INDEX `u_n_a` ,
ADD INDEX `u_a_n` (`username`, `address`, `name`) USING BTREE ;

インデックスの失敗状況

1 結合されたフィールドが最適に従っていません。左プレフィックス ルール

2。「%test」などのファジー クエリ。

# 索引生效
select * from `test` where `name` like "123";
# 索引生效
select * from `test` where `name` like "123%";
# 索引失效
select * from `test` where `name` like "%123";
# 索引失效
select * from `test` where `name` like "%123%";

3. 在索引列上做如下任何操作(计算,函数,(自动或者手动)类型装换),会导致索引失效而导致全表扫描

如 sex 字段上添加索引

# 索引失效
select * from `test` where `sex`*0.5  = 1

4. 范围索引(>,

构建索引

ALTER TABLE `test`
ADD INDEX `s_n` (`sex`, `name`) USING BTREE ;

示例:

# 命中全部
select * from `test` where `sex` = 1 and `name` = 'a';
# 命中部分,sex命中,name失效
select * from `test` where `sex` > 1 and `name` = 'a';

5. !=, is null, is not null 无法使用索引

6. 字符串字段的值不加单引号(数字不报错,英文报错)索引失效

构建索引

ALTER TABLE `test`
ADD INDEX `name` (`name`) USING BTREE ;

示例

# 索引失效
select * from `test` where `name`  =  123;
# 索引生效
select * from `test` where `name`  =  '123';

7. or 条件导致索引失效

构建索引

ALTER TABLE `test`
ADD INDEX `sex` (`sex`) USING BTREE ;
ADD INDEX `n_u` (`name`, `username`) USING BTREE ;

示例:

# 索引不生效
select * from `test` where (`name` = 'aa' and `username` = 'aa') or `sex` > 1 
# 索引sex生效
select * from `test` where `sex` = 1 and (`id` = 2 or `name` = 'aa' )

附录

最佳左前缀法则

如果索引了多列,要遵守最左前缀法则。指的是查询要从索引的最左前列开始并且不跳过索引中的列

如下构建索引

ALTER TABLE `test` ADD INDEX `u_a_n` (`username`, `address`, `name`) USING BTREE ;

如下查询情况

# 命中部分
select * from `test` where `username` = 'aaa';
# 命中部分
select * from `test` where `username` = 'aa' and `address` = 'aaa';
# 全命中
select * from `test` where `username` = 'aa' and `address` = 'aaa' and `name` = 'a';
# 不命中,第一条件字段不是username
select * from `test` where  `address` = 'aaa';

以上がmysqlインデックスとは何ですか? mysql インデックスの関連知識の紹介の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明
この記事はsegmentfaultで複製されています。侵害がある場合は、admin@php.cn までご連絡ください。
酸性の特性(原子性、一貫性、分離、耐久性)を説明します。酸性の特性(原子性、一貫性、分離、耐久性)を説明します。Apr 16, 2025 am 12:20 AM

酸性属性には、原子性、一貫性、分離、耐久性が含まれ、データベース設計の基礎です。 1.原子性は、トランザクションが完全に成功するか、完全に失敗することを保証します。 2.一貫性により、データベースがトランザクションの前後に一貫性を保証します。 3.分離により、トランザクションが互いに干渉しないようにします。 4.永続性により、トランザクションの提出後にデータが永久に保存されることが保証されます。

MySQL:データベース管理システムとプログラミング言語MySQL:データベース管理システムとプログラミング言語Apr 16, 2025 am 12:19 AM

MySQLは、データベース管理システム(DBMS)であるだけでなく、プログラミング言語にも密接に関連しています。 1)DBMSとして、MySQLはデータを保存、整理、取得するために使用され、インデックスを最適化するとクエリのパフォーマンスが向上する可能性があります。 2)SQLとPythonに埋め込まれたプログラミング言語とSQLalchemyなどのORMツールを使用すると、操作を簡素化できます。 3)パフォーマンスの最適化には、インデックス、クエリ、キャッシュ、ライブラリ、テーブル分割、およびトランザクション管理が含まれます。

MySQL:SQLコマンドでデータの管理MySQL:SQLコマンドでデータの管理Apr 16, 2025 am 12:19 AM

MySQLはSQLコマンドを使用してデータを管理します。 1.基本コマンドには、select、挿入、更新、削除が含まれます。 2。高度な使用には、参加、サブクエリ、および集計関数が含まれます。 3.一般的なエラーには、構文、ロジック、パフォーマンスの問題が含まれます。 4。最適化のヒントには、インデックスの使用、Select*の回避、制限の使用が含まれます。

MySQLの目的:データを効果的に保存および管理しますMySQLの目的:データを効果的に保存および管理しますApr 16, 2025 am 12:16 AM

MySQLは、データの保存と管理に適した効率的なリレーショナルデータベース管理システムです。その利点には、高性能クエリ、柔軟なトランザクション処理、豊富なデータ型が含まれます。実際のアプリケーションでは、MySQLはeコマースプラットフォーム、ソーシャルネットワーク、コンテンツ管理システムでよく使用されますが、パフォーマンスの最適化、データセキュリティ、スケーラビリティに注意を払う必要があります。

SQLとMySQL:関係を理解するSQLとMySQL:関係を理解するApr 16, 2025 am 12:14 AM

SQLとMySQLの関係は、標準言語と特定の実装との関係です。 1.SQLは、リレーショナルデータベースの管理と操作に使用される標準言語であり、データの追加、削除、変更、クエリを可能にします。 2.MYSQLは、SQLを運用言語として使用し、効率的なデータストレージと管理を提供する特定のデータベース管理システムです。

Innodb Redoログの役割を説明し、ログを元に戻します。Innodb Redoログの役割を説明し、ログを元に戻します。Apr 15, 2025 am 12:16 AM

INNODBは、レドログと非論的なものを使用して、データの一貫性と信頼性を確保しています。 1.レドログは、クラッシュの回復とトランザクションの持続性を確保するために、データページの変更を記録します。 2.Undologsは、元のデータ値を記録し、トランザクションロールバックとMVCCをサポートします。

説明出力(タイプ、キー、行、追加)で探す重要なメトリックは何ですか?説明出力(タイプ、キー、行、追加)で探す重要なメトリックは何ですか?Apr 15, 2025 am 12:15 AM

説明コマンドのキーメトリックには、タイプ、キー、行、および追加が含まれます。 1)タイプは、クエリのアクセスタイプを反映しています。値が高いほど、constなどの効率が高くなります。 2)キーは使用されているインデックスを表示し、nullはインデックスがないことを示します。 3)行はスキャンされた行の数を推定し、クエリのパフォーマンスに影響します。 4)追加の情報を最適化する必要があるというFilesortプロンプトを使用するなど、追加情報を提供します。

説明の一時的なステータスを使用し、それを回避する方法は何ですか?説明の一時的なステータスを使用し、それを回避する方法は何ですか?Apr 15, 2025 am 12:14 AM

Temporaryを使用すると、MySQLクエリに一時テーブルを作成する必要があることが示されています。これは、異なる列、またはインデックスされていない列を使用して順番に一般的に見られます。インデックスの発生を回避し、クエリを書き直し、クエリのパフォーマンスを改善できます。具体的には、expliect出力に使用を使用する場合、MySQLがクエリを処理するために一時テーブルを作成する必要があることを意味します。これは通常、次の場合に発生します。1)個別またはグループビーを使用する場合の重複排除またはグループ化。 2)Orderbyに非インデックス列が含まれているときに並べ替えます。 3)複雑なサブクエリを使用するか、操作に参加します。最適化方法には以下が含まれます。1)OrderbyとGroupB

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ヘンタイを無料で生成します。

ホットツール

Dreamweaver Mac版

Dreamweaver Mac版

ビジュアル Web 開発ツール

PhpStorm Mac バージョン

PhpStorm Mac バージョン

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

SublimeText3 英語版

SublimeText3 英語版

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

DVWA

DVWA

Damn Vulnerable Web App (DVWA) は、非常に脆弱な PHP/MySQL Web アプリケーションです。その主な目的は、セキュリティ専門家が法的環境でスキルとツールをテストするのに役立ち、Web 開発者が Web アプリケーションを保護するプロセスをより深く理解できるようにし、教師/生徒が教室環境で Web アプリケーションを教え/学習できるようにすることです。安全。 DVWA の目標は、シンプルでわかりやすいインターフェイスを通じて、さまざまな難易度で最も一般的な Web 脆弱性のいくつかを実践することです。このソフトウェアは、

mPDF

mPDF

mPDF は、UTF-8 でエンコードされた HTML から PDF ファイルを生成できる PHP ライブラリです。オリジナルの作者である Ian Back は、Web サイトから「オンザフライ」で PDF ファイルを出力し、さまざまな言語を処理するために mPDF を作成しました。 HTML2FPDF などのオリジナルのスクリプトよりも遅く、Unicode フォントを使用すると生成されるファイルが大きくなりますが、CSS スタイルなどをサポートし、多くの機能強化が施されています。 RTL (アラビア語とヘブライ語) や CJK (中国語、日本語、韓国語) を含むほぼすべての言語をサポートします。ネストされたブロックレベル要素 (P、DIV など) をサポートします。