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をインストールする方法

推薦する

jQueryは広告を上下にスクロールする効果を実現します

この記事では、広告を上下にスクロールする効果を実現するためのjQueryの具体的なコードを参考までに...

Linux の Docker コンテナで bash を終了する 2 つの方法

bash を終了する場合は、次の 2 つのオプションがあります。最初のもの: Ctrl + d を押...

スクロール画像バーを実現するための CSS サンプルコード

一部の Web サイトでは、画像が連続的にスクロールしているのをよく見かけます。この効果は、CSS ...

HTML初心者や初級者向けの提案。専門家は無視してかまいません。

感想:私はバックエンド開発者です。静的 (HTML) ページを取得すると、ページ構造と命名規則が極端...

js キャンバスは角丸画像を実現します

この記事では、角を丸くするためのjsキャンバスの具体的なコードを参考までに紹介します。具体的な内容は...

Linux クラウド サーバーに JDK と Tomcat をインストールするための詳細な手順 (推奨)

JDKをダウンロードしてインストールするステップ 1: まず、公式 Web サイト http://...

Vue3の状態管理の使用方法の詳細な説明

目次背景提供/注入共有状態の抽出データを提供するデータの挿入まとめ反応的な共有状態の抽出共有状態の使...

データベース管理に役立つ 5 つの MySQL GUI ツール

MySQL には多くのデータベース管理ツールがあります。作業効率の向上に役立つ優れた GUI ツール...

ウェブサイト標準の検証方法を通じてFlashページを共有する方法

1. 埋め込みは違法です<embed> タグは Netscape のプライベート タグで...

MySQL: MySQL 関数

1. 組み込み関数1. 数学関数ランド()丸め(数値) ceil(数値)階数(数値)ランダム丸め切り...

VMware 構成 VMnet8 ネットワーク方法の手順

目次1. はじめに2. 設定手順1. はじめに1. NAT モード (VMnet8) は、仮想マシン...

CSS 要素を表示および非表示にする 9 つの方法

Web ページの制作では、要素の表示と非表示は非常に一般的な要件です。この記事では、要素を表示したり...

ウェブページの読み込み進捗状況バーの詳細な説明(推奨)

(Web ページの読み込み中に、コンテンツが多すぎて読み込みと待機が続くことがあります。このとき、...

MySQL コマンドを使用してインデックスを作成、削除、およびクエリする方法の紹介

MySQL データベース テーブルでは、インデックスを作成、表示、再構築、削除できるため、クエリ速度...

React onClickにパラメータを渡す問題について話しましょう

背景下のようなリストでは、削除ボタンをクリックすると削除操作を実行する必要があります。 リスト生成:...