MySQLインデックスの作成について知っておくべきこと

MySQLインデックスの作成について知っておくべきこと

序文:

MySQL では、基本的にすべてのテーブルにインデックスがあり、ビジネス シナリオに応じて異なるインデックスを追加する必要がある場合もあります。データベースを効率的に運用するには、インデックスの構築が非常に重要です。この記事では、インデックス作成に関する知識や注意点を紹介します。

1. インデックスメソッドを作成する

テーブルを作成するときにインデックスを作成することも、テーブルの作成後に alter table または create index ステートメントを使用してインデックスを作成することもできます。以下に、一般的なインデックス作成シナリオをいくつか示します。

# テーブル作成時にインデックスを指定する CREATE TABLE `t_index` (
  `increment_id` int(11) NOT NULL AUTO_INCREMENT COMMENT '自動増分主キー',
  `col1` int(11) NULLではない、
  `col2` varchar(20) NOT NULL,
  `col3` varchar(50) NOT NULL,
  `col4` int(11) NULLではない、
 `col5` varchar(50) NOT NULL,
  主キー (`increment_id`)、
  ユニークキー `uk_col1` (`col1`)、
  キー `idx_col2` (`col2`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='テストインデックス';

# インデックスを作成する(2つの方法)
# 通常のインデックス alter table `t_index` add index idx_col3 (col3);
 t_index(col3) にインデックス idx_col3 を作成します。
# ユニークインデックス alter table `t_index` add unique index uk_col4 (col4);
t_index(col4) に一意のインデックス uk_col4 を作成します。
# 結合インデックス alter table `t_index` add index idx_col3_col4 (col3,col4);
t_index(col3,col4) にインデックス idx_col3_col4 を作成します。
# プレフィックスインデックス alter table `t_index` add index idx_col5 (col5(20));
 t_index(col5(20))にインデックスidx_col5を作成します。

# テーブルインデックスを表示します。mysql> show index from t_index;
+---------+------------+-----------+--------------+--------------+-------------+-----------+----------+-----------+-----------+-----------+------------+------------+
| テーブル | 非一意 | キー名 | インデックス内のシーケンス | 列名 | 照合 | カーディナリティ | サブパート | パック | Null | インデックス タイプ | コメント | インデックス コメント |
+---------+------------+-----------+--------------+--------------+-------------+-----------+----------+-----------+-----------+-----------+------------+------------+
| t_index | 0 | PRIMARY | 1 | increment_id | A | 0 | NULL | NULL | | BTREE | | |
| t_index | 0 | uk_col1 | 1 | col1 | A | 0 | NULL | NULL | | BTREE | | |
| t_index | 1 | idx_col2 | 1 | col2 | A | 0 | NULL | NULL | | BTREE | | |
| t_index | 1 | idx_col3 | 1 | col3 | A | 0 | NULL | NULL | | BTREE | | |
+---------+------------+-----------+--------------+--------------+-------------+-----------+----------+-----------+-----------+-----------+------------+------------+

2. インデックスを作成するために必要な権限

ルート アカウントを使用していない場合は、インデックスを作成するときに権限の問題を考慮する必要があります。作成権限と変更権限のみが必要ですか?詳しく見てみましょう。

# ユーザー権限をテストする mysql> show grants;
+------------------------------------------------------------------------------------------------------+
| testuser@% への権限付与 |
+------------------------------------------------------------------------------------------------------+
| 'testuser'@'%' に *.* の使用権限を付与 |
| `testdb`.* に対して SELECT、INSERT、UPDATE、DELETE、CREATE、ALTER 権限を 'testuser'@'%' に付与します |
+------------------------------------------------------------------------------------------------------+

# alter table を使用してインデックスを作成します。 mysql> alter table `t_index` add index idx_col2 (col2);
クエリは正常、影響を受けた行は 0 行 (0.05 秒)
レコード: 0 重複: 0 警告: 0

# インデックスを作成 mysql> create index idx_col3 on t_index(col3);
エラー 1142 (42000): テーブル 't_index' の INDEX コマンドがユーザー 'testuser'@'localhost' に拒否されました

# インデックスの作成 インデックスを作成するには、インデックス権限も必要です。インデックス権限を付与してから、mysql> create index idx_col3 on t_index(col3); を実行します。
クエリは正常、影響を受けた行は 0 行 (0.04 秒)
レコード: 0 重複: 0 警告: 0

上記のテストから、alter table メソッドを使用してインデックスを作成するには alter 権限が必要であり、create index メソッドを使用してインデックスを作成するには index 権限が必要であることがわかります。

さらに、alter table `tb_name` drop index xxx および drop index xxx on tb_name を使用してインデックスを削除することもできます。これにはそれぞれ alter 権限と index 権限が必要です。

インデックスの明らかな利点はクエリを高速化できることですが、インデックスの作成にはコストもかかります。まず、インデックスが作成されるたびに、そのインデックス用の B+ ツリーを作成する必要があり、追加のストレージ スペースが必要になります。次に、テーブル内のデータが追加、削除、または変更されると、インデックスも動的に維持する必要があるため、データ維持の速度が低下します。したがって、インデックスを作成する際には、ビジネスを考慮する必要があります。テーブルにインデックスを追加しすぎないことをお勧めします。

上記は、MySQL インデックスの作成について知っておく必要のある詳細情報です。MySQL インデックスの作成の詳細については、123WORDPRESS.COM の他の関連記事に注目してください。

以下もご興味があるかもしれません:
  • MySQL で 800 万エントリのテスト データ テーブルをすばやく作成する方法
  • 1 つの記事で MySQL インデックス作成の原則を理解する
  • MySQLはスケジュールされたタスクを作成します
  • MySQLデータベースを使い始めるための最初のステップはテーブルを作成することです
  • MySQLでテーブルを作成し、フィールドコメントを追加する方法
  • MySQL ストアド プロシージャの作成、呼び出し、管理の詳細な説明
  • MySQLは多対多と1対1の関係を作成します

<<:  ウェブページの最も基本的なコード

>>:  CSS 位置プロパティが絶対の場合のパーセンテージ値の計算

推薦する

deepin 2014 システムに MySQL データベースをインストールする方法

Deepin 2014 のダウンロードとインストールDeepin 2014 のダウンロードとインスト...

Alibaba Cloud Server Linux システムは Tomcat を構築して Web プロジェクトを展開します

私は全体のプロセスを 4 つのステップに分けます。 JDKをダウンロードしてインストールするTomc...

nestjs における例外フィルター Exceptionfilter の具体的な使用法

Nestjs 例外フィルターといえば、非常に強力な .Net のグローバル フィルターについて触れな...

クリック範囲を拡大する入力チェックボックスを実装する方法

XML/HTML コードコンテンツをクリップボードにコピー< div style = &quo...

Bootstrap 3.0 学習ノートのページレイアウト

今回はレイアウトを中心に学習しますが、これは基本的なHTMLタグのほとんどにも存在するため、比較的簡...

Chrome、Firefox、IEで入力カーソルの位置がずれる問題の解決方法

ブラウザで入力カーソルがずれる問題の詳しい説明<br />仕事で問題に遭遇し、解決策を探...

ウェブメッセージボード機能を実現するjs

この記事の例では、Webメッセージボードを実装するためのjsの具体的なコードを参考までに共有していま...

CentOS 7へのJenkinsのインストール手順の詳細な説明

Yum経由でJenkinsをインストールする1. インストール # yum ソースをインポート wg...

VMware Workstation のインストール Linux (Ubuntu) システム

システムをコンピューターにインストールする方法がわからない場合は、Linux を学習したい場合は、仮...

Vue2とVue3のライフサイクルの比較の詳細な理解

目次サイクル比較使用法要約するサイクル比較ヴュー2ヴュー3作成前設定作成された設定マウント前マウント...

MySQLユーザー削除バグを解決する

著者が MySQL を使用してユーザーを追加していたところ、ユーザー名が間違って記述されていることに...

年末ですが、MySQL パスワードは安全ですか?

序文:年末です。データベースを検査する時期ではないでしょうか?一般的に、検査では、パスワードの複雑さ...

MySQLデータベースのマスタースレーブレプリケーションの原理と機能の分析

目次1. データベースのマスター/スレーブ分類: 2. MySQL マスタースレーブの紹介3. マス...

Linux の netstat コマンドの詳細な紹介

目次1. はじめに2. 出力情報の説明3. netstatの共通パラメータ4. netstatネット...

MySQL累積計算実装方法の詳しい説明

目次序文需要分析MySQL ユーザー変数累積計算にMysqlユーザー変数を使用する要約するこの記事で...