序文: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 の他の関連記事に注目してください。 以下もご興味があるかもしれません:
|
>>: CSS 位置プロパティが絶対の場合のパーセンテージ値の計算
目次01 アトミックDDLの紹介02 一部のDDL操作の実行動作の変更03 DDL 操作のログを表示...
結果 (完全なコードは下部にあります): 実装は難しくありませんが、繰り返しコードが多くなります。実...
序文:グループ化関数はグループ内の最初のデータを取得しますが、各グループ内の最新のデータを取得する必...
はじめに: 最近、会社のプロジェクトでデータベースのバージョンが変更されました。ここでは、MySQL...
画像をダウンロードMySQLイメージの選択 docker 検索 mysql MySQL 5.7 イメ...
MySQL には 3 つの日付型があります。日付(年-月-日)テーブル test(hiredate ...
落とし穴1. ネット上の多くのチュートリアルでは環境変数を設定するファイル名はmy.iniと書いてあ...
コアコード <!DOCTYPE html> <html lang="ja...
目次背景サーバーの依存関係バックエンド構成クロスドメインバックエンド構成の静的リソースアクセスではk...
プロジェクトを作成しているときに、ユーザーがアクションを実行し、特定の状態を変更し、ページを更新して...
概要binlog2sql は、Python で開発されたオープンソースの MySQL Binlog ...
1. ローカルyumソースを設定する1. ISOイメージをマウントする マウント -o loop /...
この記事では、期間限定フラッシュセール機能を実装するためのJavaScriptの具体的なコードを参考...
この記事では、二次リンク効果を実現するためのReactの具体的なコードを参考までに共有します。具体的...
最近、Linux ホストに環境を展開する際に多くの問題に遭遇しました。最初の問題は、ジャンプ サーバ...