MySQL のキーとインデックスの違い

MySQL のキーとインデックスの違い

まずはコードを見てみましょう:

ALTER TABLE reportblockdetail ADD KEY taskcode (タスクコード)
ALTER TABLE reportblockdetail DROP KEY taskcode

まあ、ここがまさに混乱するところです。

MySQL を使用する場合、ほとんどの場合、同様の効果を示すため、この問題に注意を払わないかもしれませんが、それでも同等にすることはできません (少なくとも理論的には)。

インデックスとキーの違いは、開始点が異なることにあります。インデックスはテーブルの検索と操作の速度を維持する役割を担い、キーはテーブルの整合性を維持する役割を担います。

このような混乱が生じた場合は、おそらく MySQL の奇妙な現象が原因です。

  • MySQLのインデックスは制約インデックスです(つまり、インデックスを作成すると自動的に制約が作成されます)
  • MySQL で制約を作成すると、自動的にインデックスが作成されます。

不思議ですよね? 2つは別物ですが、作成されると互いにくっついています。 なぜそうなるのでしょうか?理由は次の通りです:

MySQL の制約効果はインデックスを通じて実現されます。MySQL データベースは、一意のインデックスを通じて現在の列が一意であるかどうかを判断します。

最後にまとめます。

  • 制約には、主キー制約、一意制約、外部キー制約、NOT NULL 制約、チェック制約(チェック制約は MySQL では一切使用できませんが、通常通り設定できます)などがあります。
  • インデックスには、共通インデックス、主キー インデックス、一意インデックス、結合インデックス、全文インデックスなどが含まれます。
  • どちらもテーブルを作成するときに実現できます。テーブルを作成した後、alter ステートメントを使用してテーブルを作成および削除できます。具体的なステートメントについては、上記の 2 つのポイントについて Baidu で検索してください。私はこれらを MySQL5.5 と innoDB ストレージ エンジンでテストしました。

理論上、MySQL のキーとインデックスは同一視できず、同じものではありませんが、実際の使用では、基本的に違いはありません。

コンテンツ拡張子:

キーと主キーの違い

テーブルwh_logrecordを作成します( 
logrecord_id int(11) NOT NULL auto_increment, 
user_name varchar(100) デフォルト NULL、 
operation_time datetime デフォルト NULL、 
logrecord_operation varchar(100) デフォルト NULL、 
主キー (logrecord_id)、 
キー wh_logrecord_user_name (ユーザー名) 
)

KEYとINDEXの違い

注: この部分についてはまだ混乱しています。
KEY は多くの場合、INDEX の同義語です。列定義にキーワード属性 PRIMARY KEY が指定されている場合は、PRIMARY KEY を KEY のみとして指定することもできます。これは他のデータベース システムとの互換性のために行われます。 PRIMARY KEY は一意の KEY です。この場合、すべてのキーワード列は NOT NULL として定義する必要があります。列が明示的に NOT NULL として定義されていない場合、MySQL はそれらを暗黙的に定義する必要があります。テーブルには PRIMARY KEY が 1 つだけあります。

MySQL のインデックスとキーの違い

キーは、リレーショナル モデル理論の一部であるキー値です。たとえば、データの整合性チェックや一意性制約に使用される主キーと外部キーがあります。インデックスは実装レベルにあります。たとえば、テーブル内の任意の列にインデックスを作成できます。その後、インデックスが作成された列が SQL ステートメントの Where 条件にある場合、データをすばやく見つけて取得できます。ユニーク インデックスについては、インデックスの一種にすぎません。ユニーク インデックスの作成は、この列のデータが重複できないことを意味します。MySQL では、ユニーク インデックス タイプのインデックスに対してさらに特別な最適化を行うことができると思います。

したがって、テーブルを設計するときには、キーはモデル レベルのみでよく、クエリの最適化が必要な場合は、関連する列のインデックスを作成できます。

さらに、MySQL では、主キー列に対して、MySQL が自動的に一意のインデックスを作成するため、再度インデックスを作成する必要はありません。

上記はMySQLのキーとインデックスの違いについての詳しい内容です。MySQLのキーとインデックスの違いについてさらに詳しく知りたい方は、123WORDPRESS.COMの他の関連記事もご覧ください。

以下もご興味があるかもしれません:
  • MySQL における KEY、PRIMARY KEY、UNIQUE KEY、INDEX の違い
  • MySQL におけるキー、主キー、一意キー、インデックスの違い
  • MySQL でインデックスを作成すると主キーを作成できますか?

<<:  JavaScript 関数呼び出し、適用、バインド メソッドのケース スタディ

>>:  Dockerにelasticsearchとkibanaをインストールする方法

推薦する

MySQLのあいまいクエリインデックスの失敗の問題を解決するいくつかの方法

% ワイルドカードを使用すると、インデックス失敗の問題が発生することがよくあります。ここでは、lik...

NodeサイトのForever+nginx導入方法例

私は最近、最も安い Tencent クラウド サーバーを購入しました。これは主に、Web テクノロジ...

vue-cli 設定では Vuex の完全なプロセスレコードを使用します

目次序文インストールと使用方法モジュラー管理Vuex の状態永続性要約する序文Vue 開発では、ユー...

MySQLクエリ最適化: 100万件のデータに対するテーブル最適化ソリューション

1. 2つのクエリエンジン(myIsamエンジン)のクエリ速度InnoDB はテーブル内の特定の行数...

MySQL テーブルにはどのくらいの量のデータを保存できますか?

プログラマーは MySQL を扱う機会が多く、毎日触れているとも言えますが、MySQL テーブルには...

JavaScript データ プロキシとイベントの詳細な分析

目次データブローカーとイベントObject.defineProperty メソッドのレビューデータブ...

シリアルポート使用時のvue-electronの問題解決

エラーは次のとおりです:キャッチされない TypeError: 未定義のプロパティ 'mod...

MySQLデータのエクスポートとインポートに関する知識ポイントの簡単な分析

多くの場合、ローカル データベースのデータをエクスポートしたり、他のデータベースからデータをインポー...

MySQL 外部キー制約の詳細な説明

公式ドキュメント: https://dev.mysql.com/doc/refman/5.7/en/...

MySQL 8.0.12 インストール グラフィック チュートリアル

MySQL8.0.12 インストールチュートリアルをみんなで共有します。 1. インストール1.イン...

MySQL ルートパスワードを変更する複数の方法 (推奨)

方法1: SET PASSWORDコマンドを使用する MySQL -u ルート mysql> ...

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

序文タイトルを見ると、誰もが「Debian 9 に MySQL をインストールするにはどうすればいい...

WeChatアプレットはふるいを振る効果を実現

この記事では、WeChatアプレットの具体的なコードを参考までに共有します。具体的な内容は次のとおり...

Docker と Intellij IDEA の融合により、Java 開発の生産性が 10 倍向上

目次1. 開発前の準備2. 新しいプロジェクトIdea は Java 開発のための強力なツールであり...

Linux での Firewalld の高度な設定の使用に関する詳細な説明

IPマスカレードとポート転送Firewalldは2種類のネットワークアドレス変換をサポートしています...