検索
ホームページデータベースmysql チュートリアルMySQL でインデックスを表示、作成、削除する方法の紹介

この記事では、MySQL のインデックスを表示、作成、削除する方法を主に紹介し、例の形で詳細に mysql を扱います。インデックスの表示、作成、および削除に関する関連実装のヒントも含まれています。

この記事の例では、MySQL でインデックスを表示、作成、削除する方法を説明します。皆さんの参考に共有してください。詳細は以下の通りです:

1.インデックス機能

インデックス列では、上記の順序付けされた検索に加えて、データベースはさまざまな高速測位テクノロジを使用して、クエリの効率を大幅に向上させます。特にデータ量が非常に多く、クエリに複数のテーブルが含まれる場合、インデックスを使用するとクエリが何千倍も高速化することがあります。

たとえば、インデックスのないテーブル t1、t2、t3 が 3 つあり、それぞれ列 c1、c2、c3 のみが含まれており、各テーブルには 1 から 1000 までの値を参照する 1000 行のデータが含まれています。値が等しい場合のクエリを以下に示します。

SELECT c1,c2,c3 FROM t1,t2,t3 WHERE c1=c2 AND c1=c3

このクエリの結果は 1000 行になり、各行には 3 つの等しい値が含まれます。インデックスを使用せずにこのクエリを処理するには、3 つのテーブルのすべての組み合わせを検索して、WHERE 句に一致する行を取得する必要があります。可能な組み合わせの数は 1000×1000×1000 (10 億) であるため、明らかにクエリは非常に遅くなります。

各テーブルにインデックスが付けられている場合、クエリプロセスを大幅に高速化できます。インデックスを利用したクエリ処理は以下のとおりです。

(1) テーブル t1 の最初の行を選択して、この行に含まれるデータを表示します。
(2) テーブル t2 のインデックスを使用して、t1 の値に一致する t2 内の行を直接見つけます。同様に、テーブル t3 のインデックスを使用して、t1 の値と一致する t3 内の行を直接見つけます。
(3) テーブル t1 の次の行をスキャンし、t1 のすべての行が走査されるまで前のプロセスを繰り返します。

この場合、フル スキャンはテーブル t1 で引き続き実行されますが、テーブル t2 および t3 のインデックス ルックアップを実行して、これらのテーブル内の行を直接取得できます。これは、インデックスを使用しない場合よりも 100 万倍高速です。
インデックスを使用することで、MySQL は WHERE 句の条件を満たす行の 検索 を高速化します。また、複数テーブルの結合クエリを実行する場合、結合を実行するときに他のテーブル内の一致する行を高速化します。

2. インデックスの作成

CREATE TABLE ステートメントの実行時にインデックスを作成することも、CREATE INDEX または ALTER TABLE を単独で使用してテーブルにインデックスを追加することもできます。

1. ALTER TABLE

ALTER TABLE は、通常のインデックス、UNIQUE インデックス、または PRIMARY KEY インデックスを作成するために使用されます。

ALTER TABLE table_name ADD INDEX index_name (column_list)
ALTER TABLE table_name ADD UNIQUE (column_list)
ALTER TABLE table_name ADD PRIMARY KEY (column_list)

ここで、table_name はインデックスを作成するテーブルの名前、column_list はインデックスを作成する列を示します。複数の列がある場合は、カンマで区切ります。インデックス名index_nameはオプションです。デフォルトでは、MySQLは最初のインデックス列に基づいて名前を割り当てます。さらに、ALTER TABLE を使用すると、単一のステートメントで複数のテーブルを変更できるため、複数のインデックスを同時に作成できます。

2. CREATE INDEX

CREATE INDEX は、テーブルに通常のインデックスまたは UNIQUE インデックスを追加できます。

CREATE INDEX index_name ON table_name (column_list)
CREATE UNIQUE INDEX index_name ON table_name (column_list)

table_name、index_name、column_list は ALTER TABLE ステートメントと同じ意味を持ち、インデックス名はオプションではありません。また、CREATE INDEX ステートメントを使用して PRIMARY KEY インデックスを作成することはできません。

3.インデックスの種類

インデックスを作成するときに、インデックスに重複した値を含めることができるかどうかを指定できます。含めない場合は、インデックスを PRIMARY KEY または UNIQUE インデックスとして作成する必要があります。単一列の一意のインデックスの場合、これにより、単一列に重複値が含まれないことが保証されます。複数列の一意のインデックスの場合、複数の値の組み合わせが繰り返されないことが保証されます。

PRIMARY KEY インデックスと UNIQUE インデックスは非常に似ています。実際、PRIMARY KEY インデックスは PRIMARY という名前の単なる UNIQUE インデックスです。これは、テーブル内に同じ名前のインデックスを 2 つ持つことは不可能であるため、テーブルには PRIMARY KEY を 1 つだけ含めることができることを意味します。

次の SQL ステートメントは、sid の PRIMARY KEY インデックスを Students テーブルに追加します。

コードは次のとおりです:

ALTER TABLE students ADD PRIMARY KEY (sid)

4. インデックスの削除

インデックスを削除するには、ALTER TABLE または DROP INDEX ステートメントを使用できます。 CREATE INDEX ステートメントと同様に、DROP INDEX は ALTER TABLE 内のステートメントとして処理できます。構文は次のとおりです。

DROP INDEX index_name ON talbe_name
ALTER TABLE table_name DROP INDEX index_name
ALTER TABLE table_name DROP PRIMARY KEY

このうち、最初の 2 つのステートメントは同等で、table_name のインデックスindex_name を削除します。
3 番目のステートメントは、PRIMARY KEY インデックスを削除する場合にのみ使用されます。テーブルには PRIMARY KEY インデックスが 1 つしか持てないため、インデックス名を指定する必要はありません。 PRIMARY KEY インデックスが作成されていないが、テーブルに 1 つ以上の UNIQUE インデックスがある場合、MySQL は最初の UNIQUE インデックスを削除します。
テーブルから列が削除されると、インデックスが影響を受けます。複数列インデックスの場合、列の 1 つが削除されると、その列もインデックスから削除されます。インデックスを構成するすべての列を削除すると、インデックス全体が削除されます。

5.インデックスを見る

mysql> show index from tblname;
mysql> show keys from tblname;

· Table
表的名称。
· Non_unique
如果索引不能包括重复词,则为0。如果可以,则为1。
· Key_name
索引的名称。
· Seq_in_index
索引中的列序列号,从1开始。
· Column_name
列名称。
· Collation
列以什么方式存储在索引中。在MySQL中,有值‘A'(升序)或NULL(无分类)。
· Cardinality
索引中唯一值的数目的估计值。通过运行ANALYZE TABLE或myisamchk -a可以更新。基数根据被存储为整数的统计数据来计数,所以即使对于小型表,该值也没有必要是精确的。基数越大,当进行联合时,MySQL使用该索引的机会就越大。
· Sub_part
如果列只是被部分地编入索引,则为被编入索引的字符的数目。如果整列被编入索引,则为NULL。
· Packed
指示关键字如何被压缩。如果没有被压缩,则为NULL。
· Null
如果列含有NULL,则含有YES。如果没有,则该列含有NO。
· Index_type
用过的索引方法(BTREE, FULLTEXT, HASH, RTREE)。
· Comment

总结:

通过本文的详细学习,相信有很多小伙伴对MySQL实现查看与创建以及删除索引的方法有了进一步的了解,希望对你有所帮助!

相关推荐:

MySQL如何创建和删除索引?

MySQL创建索引、重建索引、查询索引、删除索引

mysql建立索引删除索引很慢的解决

以上がMySQL でインデックスを表示、作成、削除する方法の紹介の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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

MySQLは、非同期、半同期、およびグループ複製の3つのモードを介してデータの複製を処理します。 1)非同期の複製パフォーマンスは高くなりますが、データが失われる可能性があります。 2)半同期複製により、データセキュリティが向上しますが、遅延が増加します。 3)グループレプリケーションは、高可用性要件に適したマルチマスターレプリケーションとフェールオーバーをサポートします。

説明ステートメントを使用してクエリパフォーマンスを分析するにはどうすればよいですか?説明ステートメントを使用してクエリパフォーマンスを分析するにはどうすればよいですか?Apr 28, 2025 am 12:24 AM

説明ステートメントは、SQLクエリのパフォーマンスを分析および改善するために使用できます。 1.説明ステートメントを実行して、クエリプランを表示します。 2。出力結果を分析し、アクセスの種類、インデックスの使用量に注意し、順序を結合します。 3.分析結果に基づいてインデックスを作成または調整し、結合操作を最適化し、フルテーブルスキャンを回避してクエリ効率を向上させます。

MySQLデータベースをバックアップして復元するにはどうすればよいですか?MySQLデータベースをバックアップして復元するにはどうすればよいですか?Apr 28, 2025 am 12:23 AM

論理バックアップにMySQLDUMPとホットバックアップにMySQLenterPriseBackupを使用することは、MySQLデータベースをバックアップする効果的な方法です。 1. mysqldumpを使用してデータベースをバックアップします:mysqldump-uroot-pmydatabase> mydatabase_backup.sql。 2。ホットバックアップにmysqlenterprisebackupを使用:mysqlbackup - user = root-password = password - backup-dir =/path/to/backupbackup。回復するときは、対応する寿命を使用します

MySQLのスロークエリの一般的な原因は何ですか?MySQLのスロークエリの一般的な原因は何ですか?Apr 28, 2025 am 12:18 AM

MySQLのクエリが遅い主な理由には、インデックスの欠落または不適切な使用、クエリの複雑さ、過剰なデータボリューム、および不十分なハードウェアリソースが含まれます。最適化の提案には以下が含まれます。1。適切なインデックスを作成します。 2。クエリステートメントを最適化します。 3.テーブルパーティションテクノロジーを使用します。 4.適切にハードウェアをアップグレードします。

mysqlのビューは何ですか?mysqlのビューは何ですか?Apr 28, 2025 am 12:04 AM

MySQLビューは、SQLクエリの結果に基づいた仮想テーブルであり、データを保存しません。 1)ビューは複雑なクエリを簡素化し、2)データセキュリティを強化し、3)データの一貫性を維持します。ビューは、テーブルのように使用できるデータベースにクエリを保存しますが、データは動的に生成されます。

MySQLと他のSQL方言の構文の違いは何ですか?MySQLと他のSQL方言の構文の違いは何ですか?Apr 27, 2025 am 12:26 AM

MySQLdiffersfromotherSQLdialectsinsyntaxforLIMIT,auto-increment,stringcomparison,subqueries,andperformanceanalysis.1)MySQLusesLIMIT,whileSQLServerusesTOPandOracleusesROWNUM.2)MySQL'sAUTO_INCREMENTcontrastswithPostgreSQL'sSERIALandOracle'ssequenceandt

MySQLパーティションは何ですか?MySQLパーティションは何ですか?Apr 27, 2025 am 12:23 AM

MySQLパーティション化により、パフォーマンスが向上し、メンテナンスが簡素化されます。 1)大きなテーブルを特定の基準(日付範囲など)、2)物理的に独立したファイルに物理的に分割する、3)MySQLはクエリするときに関連するパーティションに焦点を合わせることができます。

MySQLで特権をどのように許可して取り消しますか?MySQLで特権をどのように許可して取り消しますか?Apr 27, 2025 am 12:21 AM

mysqlで許可を許可および取り消す方法は? 1。grantallprivilegesondatabase_name.to'username'@'host 'などの許可を付与するために付与ステートメントを使用してください。 2。Revokeallprivilegesondatabase_name.from'username'@'host 'など、Revoke Statementを使用して、許可のタイムリーな通信を確保します。

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 顔交換ツールを使用して、あらゆるビデオの顔を簡単に交換できます。

ホットツール

SAP NetWeaver Server Adapter for Eclipse

SAP NetWeaver Server Adapter for Eclipse

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

SublimeText3 英語版

SublimeText3 英語版

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

MantisBT

MantisBT

Mantis は、製品の欠陥追跡を支援するために設計された、導入が簡単な Web ベースの欠陥追跡ツールです。 PHP、MySQL、Web サーバーが必要です。デモおよびホスティング サービスをチェックしてください。

DVWA

DVWA

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

SecLists

SecLists

SecLists は、セキュリティ テスターの究極の相棒です。これは、セキュリティ評価中に頻繁に使用されるさまざまな種類のリストを 1 か所にまとめたものです。 SecLists は、セキュリティ テスターが必要とする可能性のあるすべてのリストを便利に提供することで、セキュリティ テストをより効率的かつ生産的にするのに役立ちます。リストの種類には、ユーザー名、パスワード、URL、ファジング ペイロード、機密データ パターン、Web シェルなどが含まれます。テスターはこのリポジトリを新しいテスト マシンにプルするだけで、必要なあらゆる種類のリストにアクセスできるようになります。