MySQL インデックスの長さ制限の原理の分析

MySQL インデックスの長さ制限の原理の分析

この記事は主に、MySQL インデックスの長さ制限の原理の分析を紹介します。サンプル コードを通じて詳細に紹介されており、皆さんの学習や仕事に一定の参考学習価値があります。困っている友人は参考にしてください。

索引

TextField はインデックスをサポートしていません。

MySQLにはインデックスフィールドの長さの制限がある

InnoDB エンジンの各インデックス列の長さは 767 バイトに制限されており、すべてのインデックス列の合計長は 3072 バイトを超えることはできません。

MyISAM エンジンの各インデックス列の長さは 1000 バイトに制限されており、すべてのインデックス列の合計長は 1000 バイトを超えることはできません。

varchar の最大長は文字の長さを指します。データベースの文字セットが utf-8 の場合、1 文字は 3 バイトを占めます。したがって、UTF-8 文字セットでは、InnoDB エンジンによって作成される単一列インデックスの長さは 255 文字を超えることはできません。

MySQLのバージョンによってインデックスの長さの制限が異なります

MySQL バージョン 5.5 では、大きなインデックス キー プレフィックスをサポートしない以前のバージョンの InnoDB との互換性を保つために、大きなプレフィックス インデックスを無効にする innodb_large_prefix が導入されました。

innodb_large_prefix を有効にすると、単一のインデックスの長さを 3072 バイトに制限できます (ただし、結合されたインデックスの合計の長さ制限は 3072 バイトのままです)。無効にすると、単一のインデックスの長さ制限は 767 バイトになります。

MySQL 5.5およびMySQL 5.6では、innodb_large_prefixはデフォルトで無効になっており、MySQL 5.7以降ではデフォルトで有効になっています。

MySQL 8.0では、innodb_large_prefixは削除されました。

このため、私のマシン(MySQL 8.0)では長さ 1024 文字(UTF8 文字セットでは 3072 バイト)のインデックスを作成できますが、サーバー(MySQL 5.5)では作成できません。

インデックスの長さ制限をテストするスクリプト:

使用テスト;
存在する場合はテーブルを削除します test_index_len;
テーブルを作成する 
test_index_len(long_char varchar(1025) 主キー) ENGINE=InnoDB charset=utf8;
使用テスト;
存在する場合はテーブルを削除します test_index_len;
テーブルを作成する 
テストインデックスの長さ(
  long_char varchar(24)、
  origin_str varchar(1000)、
  キー test_index(long_char, origin_str)) ENGINE=InnoDB charset=utf8;

以上がこの記事の全内容です。皆様の勉強のお役に立てれば幸いです。また、123WORDPRESS.COM を応援していただければ幸いです。

以下もご興味があるかもしれません:
  • MySQLインデックス構造の詳細な分析
  • MySQLインデックストランザクションの詳細な分析
  • MySQL インデックス データ構造の詳細な分析
  • MySQLインデックスの詳細な分析
  • MySQLインデックスの役割を分析する

<<:  Vue はボタンをクリックしてファイルをダウンロードする操作コードを実装します (バックエンド Java)

>>:  IIS7 IIS8 リバースプロキシルールの記述、インストール、構成方法

推薦する

CSS属性のデフォルト値width: autoとwidth: 100%の違いの詳細な説明

幅: 自動子要素(コンテンツ+パディング+境界線+余白を含む)は、親要素のコンテンツ領域全体を埋めま...

Alibaba Cloud Ubuntu 16.04 が IPSec サービスを構築

IPSec の概要IPSec (インターネット プロトコル セキュリティ): ネットワーク層と適用さ...

js配列forEachインスタンスの詳細な使用方法

1. forEach() は map() に似ています。これも渡された関数に各要素を順番に適用します...

vue+elementUI で埋め込みテーブルを実装する方法の例

大学 4 年生のときのインターンシップ中に、表内のデータの番号をクリックすると、そのデータの下に新し...

自分のブログを構築しながら学んだこと

<br />ブログを始めて 1 年、私はブログの内外で多くのことを個人的に学びました。ま...

Vue3ルーティングVueRouter4を使用する簡単な例

ルーティングvue-router4 では API の大部分は変更されていないため、変更点のみに焦点を...

Centos サーバーに MySql をデプロイし、Navicat に接続するプロセスの詳細な説明

(1)サーバー構成: [root@localhost ~]# cd /usr/local/src/ ...

nginx が複数のプロキシ層を通過して実際の送信元 IP を取得するプロセスの詳細な説明

質問Nginx は $remote_addr を実際の IP アドレスとして受け取りますが、実際には...

レスポンシブ Web デザイン手法を実装し、ウォーターフォール モデルに別れを告げる 5 つのステップ (グラフィック チュートリアル)

次の Web デザイン プロジェクトはレスポンシブにする必要があると上司をようやく納得させることがで...

Linux whatisコマンドの使い方

01. コマンドの概要whatis コマンドは、システム コマンドの簡単な説明を含むいくつかの特別な...

MySQL 8の新機能ROLEの詳しい説明

MySQL ROLE はどのような問題を解決しますか?プロフェッショナルな資質を持ち、権限管理に細心...

初心者がHTMLタグを学ぶ(1)

初心者は、いくつかの HTML タグを理解することで HTML を学習できます。この入門書は、初心者...

ファイルの種類を検出するJavaScriptメソッド

目次1. 画像のバイナリデータを表示する方法2. 絵の種類の見分け方3. 画像の種類を検出する方法3...

Linux サーバーに Java Web プロジェクトをデプロイするための完全なチュートリアル

この記事は主にインターネット上の他のチュートリアルを参考にしています。実際に操作した上でのまとめです...

Vue はタブ ラベルを実装します (ラベルが自動スクロールを超える)

作成されたタブラベルがページの表示領域を超えると、タブラベルの距離だけ自動的にスクロールされます。ま...