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)!

ホットAIツール

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

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

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

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

人気の記事

ホットツール

メモ帳++7.3.1
使いやすく無料のコードエディター

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

ゼンドスタジオ 13.0.1
強力な PHP 統合開発環境

ドリームウィーバー CS6
ビジュアル Web 開発ツール

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

ホットトピック









次の手順でphpmyadminを開くことができます。1。ウェブサイトコントロールパネルにログインします。 2。phpmyadminアイコンを見つけてクリックします。 3。MySQL資格情報を入力します。 4.「ログイン」をクリックします。

MySQLはオープンソースのリレーショナルデータベース管理システムであり、主にデータを迅速かつ確実に保存および取得するために使用されます。その実用的な原則には、クライアントリクエスト、クエリ解像度、クエリの実行、返品結果が含まれます。使用法の例には、テーブルの作成、データの挿入とクエリ、および参加操作などの高度な機能が含まれます。一般的なエラーには、SQL構文、データ型、およびアクセス許可、および最適化の提案には、インデックスの使用、最適化されたクエリ、およびテーブルの分割が含まれます。

Redisは、単一のスレッドアーキテクチャを使用して、高性能、シンプルさ、一貫性を提供します。 I/Oマルチプレックス、イベントループ、ノンブロッキングI/O、共有メモリを使用して同時性を向上させますが、並行性の制限、単一の障害、および書き込み集約型のワークロードには適していません。

データベースとプログラミングにおけるMySQLの位置は非常に重要です。これは、さまざまなアプリケーションシナリオで広く使用されているオープンソースのリレーショナルデータベース管理システムです。 1)MySQLは、効率的なデータストレージ、組織、および検索機能を提供し、Web、モバイル、およびエンタープライズレベルのシステムをサポートします。 2)クライアントサーバーアーキテクチャを使用し、複数のストレージエンジンとインデックスの最適化をサポートします。 3)基本的な使用には、テーブルの作成とデータの挿入が含まれ、高度な使用法にはマルチテーブル結合と複雑なクエリが含まれます。 4)SQL構文エラーやパフォーマンスの問題などのよくある質問は、説明コマンドとスロークエリログを介してデバッグできます。 5)パフォーマンス最適化方法には、インデックスの合理的な使用、最適化されたクエリ、およびキャッシュの使用が含まれます。ベストプラクティスには、トランザクションと準備された星の使用が含まれます

MySQLは、そのパフォーマンス、信頼性、使いやすさ、コミュニティサポートに選択されています。 1.MYSQLは、複数のデータ型と高度なクエリ操作をサポートし、効率的なデータストレージおよび検索機能を提供します。 2.クライアントサーバーアーキテクチャと複数のストレージエンジンを採用して、トランザクションとクエリの最適化をサポートします。 3.使いやすく、さまざまなオペレーティングシステムとプログラミング言語をサポートしています。 4.強力なコミュニティサポートを提供し、豊富なリソースとソリューションを提供します。

Apacheはデータベースに接続するには、次の手順が必要です。データベースドライバーをインストールします。 web.xmlファイルを構成して、接続プールを作成します。 JDBCデータソースを作成し、接続設定を指定します。 JDBC APIを使用して、接続の取得、ステートメントの作成、バインディングパラメーター、クエリまたは更新の実行、結果の処理など、Javaコードのデータベースにアクセスします。

DockerでMySQLを起動するプロセスは、次の手順で構成されています。MySQLイメージをプルしてコンテナを作成および起動し、ルートユーザーパスワードを設定し、ポート検証接続をマップしてデータベースを作成し、ユーザーはすべての権限をデータベースに付与します。

CentOSにMySQLをインストールするには、次の手順が含まれます。適切なMySQL Yumソースの追加。 yumを実行して、mysql-serverコマンドをインストールして、mysqlサーバーをインストールします。ルートユーザーパスワードの設定など、MySQL_SECURE_INSTALLATIONコマンドを使用して、セキュリティ設定を作成します。必要に応じてMySQL構成ファイルをカスタマイズします。 MySQLパラメーターを調整し、パフォーマンスのためにデータベースを最適化します。
