検索
ホームページデータベースmysql チュートリアルmysql インデックスの概要 -- mysql インデックスの種類と作成の詳細な紹介

MySQL インデックスの利点については、適切に設計されインデックスを使用する MySQL がランボルギーニである場合、設計されていないインデックスを使用する MySQL は人間の三輪車です。インデックスのないテーブルの場合、1 つのテーブル クエリに数十万のデータが含まれる可能性があり、これがボトルネックになります。通常、大規模な Web サイトでは 1 日に数十万、さらには数百万のデータが生成され、インデックスのないクエリは非常に遅くなります。 WordPress を例に挙げると、そのデータ テーブルの多くは頻繁にクエリされるフィールドにインデックスを追加します。たとえば、wp_comments テーブルには 5 つのフィールド用に設計された BTREE インデックスがあります。

簡単な比較テスト

簡単な例として、20 を超えるデータ ソースから 200 万個のデータがランダムに生成され、各データ ソースは平均して約 100,000 回繰り返されました。 simple、only 自動インクリメント ID、char 型、text 型、および int 型が含まれます。MyIASM エンジンを使用する場合、1 つのテーブルのサイズは 2G です。インデックスを追加せずにテストを開始します。

次の SQL ステートメントを実行します:

mysql> SELECT id,FROM_UNIXTIME(time) FROM article WHERE a.title='测试标题'

クエリに必要な時間は、結合クエリやその他の制約と組み合わせると非常に恐ろしいものとなり、データベースは膨大なメモリを消費し、フロントエンド プログラムの実行に影響を与えます。このとき、タイトルフィールドに BTREE インデックスを追加します:

mysql> ALTER TABLE article ADD INDEX index_article_title ON title(200);

上記のクエリステートメントを再度実行すると、比較が非常に明白です:

MySQL インデックスの概念

インデックスは特別なファイル (インデックスInnoDB データ テーブル上のテーブル (スペースのコンポーネント) には、データ テーブル内のすべてのレコードへの参照ポインターが含まれています。より一般的に言うと、データベース インデックスは本の巻頭にある目次のようなもので、データベース クエリを高速化できます。上記の SQL ステートメントでインデックスがない場合、データベースは 200 個のデータをすべて走査し、対応するインデックスで条件を満たすデータを選択し、インデックス内の条件を満たすオプションを直接検索します。 。 SQL ステートメントを「SELECT * FROMarticle WHERE id=2000000」に変更した場合、データベースが 200 万行のデータを順番に読み取った結果を返しますか、それともインデックス内で直接検索しますか?上の 2 つの図の明らかな時間の比較により、すでに答えが得られています (注: 一般に、データベースはデフォルトで主キーのインデックスを生成します)。

インデックスは、クラスター化インデックスと非クラスター化インデックスに分けられます。クラスター化インデックスは、データ ストレージの物理的な場所に従って順序付けされます。ただし、非クラスター化インデックスは、複数行の取得の速度を向上させることができます。クラスター化インデックスは単一行の取得が高速です。

MySQL インデックスの種類

1. 通常のインデックス

これには制限はありません。たとえば、上記のタイトル フィールドに対して作成されるインデックスは、MyIASM のデフォルトの BTREE タイプのインデックスです。ほとんどの場合に使用するインデックスも含まれます。

01    –直接创建索引    
02    CREATE INDEX index_name ON table(column(length))    
03    –修改表结构的方式添加索引    
04    ALTER TABLE table_name ADD INDEX index_name ON (column(length))    
05    –创建表的时候同时创建索引    
06    CREATE TABLE `table` (    
07    `id` int(11) NOT NULL AUTO_INCREMENT ,    
08    `title` char(255) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL ,    
09    `content` text CHARACTER SET utf8 COLLATE utf8_general_ci NULL ,    
10    `time` int(10) NULL DEFAULT NULL ,    
11    PRIMARY KEY (`id`),    
12    INDEX index_name (title(length))    
13    )    
14    –删除索引    
15    DROP INDEX index_name ON table

2. 一意のインデックス

は、インデックス列の値が一意である必要がある点を除き、通常のインデックスと似ていますが、null 値が許可されます (主キーとは異なることに注意してください)。結合インデックスの場合、列の値の組み合わせは一意である必要があり、作成方法は通常のインデックスと同様です。

01    –创建唯一索引    
02    CREATE UNIQUE INDEX indexName ON table(column(length))    
03    –修改表结构    
04    ALTER TABLE table_name ADD UNIQUE indexName ON (column(length))    
05    –创建表的时候直接指定    
06    CREATE TABLE `table` (    
07    `id` int(11) NOT NULL AUTO_INCREMENT ,    
08    `title` char(255) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL ,    
09    `content` text CHARACTER SET utf8 COLLATE utf8_general_ci NULL ,    
10    `time` int(10) NULL DEFAULT NULL ,    
11    PRIMARY KEY (`id`),    
12    UNIQUE indexName (title(length))    
13    );


3. フルテキスト インデックス (FULLTEXT)

MySQL は、バージョン 3.23.23 以降、フルテキスト インデックス作成とフルテキスト検索をサポートしています。 CHAR、VARCHAR、または TEXT 列。TABLE ステートメントの一部として作成されるか、ALTER TABLE または CREATE INDEX を使用して後で追加されます。 ////より大きなデータ セットの場合は、FULLTEXT インデックスを使用せずにテーブルにデータを入力してインデックスを作成する方が、既存の FULLTEXT インデックスにデータを入力するよりも高速です。ただし、大容量のデータ テーブルの場合、フルテキスト インデックスの生成は非常に時間とハードディスクのスペースを消費するプロセスであることに注意してください。

01    –创建表的适合添加全文索引    
02    CREATE TABLE `table` (    
03    `id` int(11) NOT NULL AUTO_INCREMENT ,    
04    `title` char(255) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL ,    
05    `content` text CHARACTER SET utf8 COLLATE utf8_general_ci NULL ,    
06    `time` int(10) NULL DEFAULT NULL ,    
07    PRIMARY KEY (`id`),    
08    FULLTEXT (content)    
09    );    
10    –修改表结构添加全文索引    
11    ALTER TABLE article ADD FULLTEXT index_content(content)    
12    –直接创建索引    
13    CREATE FULLTEXT INDEX index_content ON article(content)


4. 単一列インデックス、複数列インデックス

複数の単一列インデックスのクエリ効果は、単一の複数列インデックスの効果とは異なります。 1 つのインデックスを使用し、最も制限の厳しいインデックスを複数選択します。

5. 複合インデックス (一番左のプレフィックス)

一般的によく使われる SQL クエリ文にはさらに制限があるため、MySQL の効率をさらに引き出すには、複合インデックスの構築を検討する必要があります。たとえば、上の表では、タイトルと時刻の結合インデックスが作成されます: ALTER TABLEarticle ADD INDEXindex_titme_time (title(50), time(10))。このような結合インデックスを確立することは、実際には、次の 2 つの結合インデックス セットを確立することと同じです:

–title、time

–title

なぜ time のような結合インデックスがないのですか?これは、MySQL 複合インデックスの「左端のプレフィックス」の結果です。簡単に理解すると、組み合わせは左端から開始するだけです。次の SQL に示すように、これら 2 つの列を含むクエリだけがこの結合インデックスを使用するわけではありません:

1    –使用到上面的索引    
2    SELECT * FROM article WHREE title='测试' AND time=1234567890;    
3    SELECT * FROM article WHREE utitle='测试';    
4    –不使用上面的索引    
5    SELECT * FROM article WHREE time=1234567890;

上記は、mysql インデックスの概要、mysql インデックス タイプと作成の詳細な紹介、その他の関連コンテンツです。PHP に注意してください。中国語のウェブサイト (www.php.cn)!

声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
MySQLのライセンスは、他のデータベースシステムと比較してどうですか?MySQLのライセンスは、他のデータベースシステムと比較してどうですか?Apr 25, 2025 am 12:26 AM

MySQLはGPLライセンスを使用します。 1)GPLライセンスにより、MySQLの無料使用、変更、分布が可能になりますが、変更された分布はGPLに準拠する必要があります。 2)商業ライセンスは、公的な変更を回避でき、機密性を必要とする商用アプリケーションに適しています。

MyisamよりもInnodbを選びますか?MyisamよりもInnodbを選びますか?Apr 25, 2025 am 12:22 AM

Myisamの代わりにInnoDBを選択する場合の状況には、次のものが含まれます。1)トランザクションサポート、2)高い並行性環境、3)高いデータの一貫性。逆に、Myisamを選択する際の状況には、1)主に操作を読む、2)トランザクションサポートは必要ありません。 INNODBは、eコマースプラットフォームなどの高いデータの一貫性とトランザクション処理を必要とするアプリケーションに適していますが、Myisamはブログシステムなどの読み取り集約型およびトランザクションのないアプリケーションに適しています。

MySQLの外国キーの目的を説明してください。MySQLの外国キーの目的を説明してください。Apr 25, 2025 am 12:17 AM

MySQLでは、外部キーの機能は、テーブル間の関係を確立し、データの一貫性と整合性を確保することです。外部キーは、参照整合性チェックとカスケード操作を通じてデータの有効性を維持します。パフォーマンスの最適化に注意し、それらを使用するときに一般的なエラーを避けてください。

MySQLのインデックスのさまざまなタイプは何ですか?MySQLのインデックスのさまざまなタイプは何ですか?Apr 25, 2025 am 12:12 AM

MySQLには、B-Treeインデックス、ハッシュインデックス、フルテキストインデックス、空間インデックスの4つのメインインデックスタイプがあります。 1.B-Treeインデックスは、範囲クエリ、ソート、グループ化に適しており、従業員テーブルの名前列の作成に適しています。 2。HASHインデックスは、同等のクエリに適しており、メモリストレージエンジンのHASH_TABLEテーブルのID列の作成に適しています。 3。フルテキストインデックスは、記事テーブルのコンテンツ列の作成に適したテキスト検索に使用されます。 4.空間インデックスは、地理空間クエリに使用され、場所テーブルのGEOM列での作成に適しています。

MySQLでインデックスをどのように作成しますか?MySQLでインデックスをどのように作成しますか?Apr 25, 2025 am 12:06 AM

tocreateanindexinmysql、usethecreateindexstatement.1)forasinglecolumn、 "createdexidx_lastnameonemployees(lastname);" 2)foracompositeindexを使用して、 "createindexidx_nameonemployees(lastname、firstname);" 3); "3)、" 3)を使用します

MySQLはSQLiteとどのように違いますか?MySQLはSQLiteとどのように違いますか?Apr 24, 2025 am 12:12 AM

MySQLとSQLiteの主な違いは、設計コンセプトと使用法のシナリオです。1。MySQLは、大規模なアプリケーションとエンタープライズレベルのソリューションに適しており、高性能と高い並行性をサポートしています。 2。SQLiteは、モバイルアプリケーションとデスクトップソフトウェアに適しており、軽量で埋め込みやすいです。

MySQLのインデックスとは何ですか?また、パフォーマンスをどのように改善しますか?MySQLのインデックスとは何ですか?また、パフォーマンスをどのように改善しますか?Apr 24, 2025 am 12:09 AM

MySQLのインデックスは、データの取得をスピードアップするために使用されるデータベーステーブル内の1つ以上の列の順序付けられた構造です。 1)インデックスは、スキャンされたデータの量を減らすことにより、クエリ速度を改善します。 2)B-Tree Indexは、バランスの取れたツリー構造を使用します。これは、範囲クエリとソートに適しています。 3)CreateIndexステートメントを使用して、createIndexidx_customer_idonorders(customer_id)などのインデックスを作成します。 4)Composite Indexesは、createIndexIDX_CUSTOMER_ORDERONORDERS(Customer_Id、Order_date)などのマルチコラムクエリを最適化できます。 5)説明を使用してクエリ計画を分析し、回避します

データの一貫性を確保するために、MySQLでトランザクションを使用する方法を説明します。データの一貫性を確保するために、MySQLでトランザクションを使用する方法を説明します。Apr 24, 2025 am 12:09 AM

MySQLでトランザクションを使用すると、データの一貫性が保証されます。 1)StartTransactionを介してトランザクションを開始し、SQL操作を実行して、コミットまたはロールバックで送信します。 2)SavePointを使用してSave Pointを設定して、部分的なロールバックを許可します。 3)パフォーマンスの最適化の提案には、トランザクション時間の短縮、大規模なクエリの回避、分離レベルの使用が合理的に含まれます。

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

Video Face Swap

Video Face Swap

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

ホットツール

Dreamweaver Mac版

Dreamweaver Mac版

ビジュアル Web 開発ツール

VSCode Windows 64 ビットのダウンロード

VSCode Windows 64 ビットのダウンロード

Microsoft によって発売された無料で強力な IDE エディター

SublimeText3 Mac版

SublimeText3 Mac版

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

Safe Exam Browser

Safe Exam Browser

Safe Exam Browser は、オンライン試験を安全に受験するための安全なブラウザ環境です。このソフトウェアは、あらゆるコンピュータを安全なワークステーションに変えます。あらゆるユーティリティへのアクセスを制御し、学生が無許可のリソースを使用するのを防ぎます。

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール