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

推薦する

Docker を使用して Nginx+Flask+Mongo アプリケーションをデプロイする

サーバーにはNginx、データベースサポートにはMongo、Python言語のWebフレームワークに...

JS は VUE コンポーネントに基づいて都市リスト効果を実装します

この記事の例では、VUEコンポーネントに基づいて都市リストエフェクトを実装するための具体的なコードを...

CSSはリストのスタイルを設定し、ナビゲーションメニューの実装コードを作成します。

1. リストシンボルを設定するlist-style-type: attribute; //リストの...

Vue+ElementUI Treeの使い方

Vue+ElementUI Treeの使い方は参考までに。具体的な内容は以下のとおりです。 フロント...

HTML ページに SVG を挿入する複数の方法

SVG (Scalable Vector Graphics)は、XML 構文に基づいた画像形式です。...

スクロールバーを非表示にしてコンテンツをスクロールする CSS サンプルコード

序文ページの HTML 構造にネストされたボックスが多数含まれている場合、ページに複数の垂直スクロー...

Mysqlはフィールドスプライシングのための3つの関数を実装している

データをオペレーションにエクスポートする場合、フィールドの結合は避けられません。MySQL でこれが...

MySQL トリガーの原理と使用例の分析

この記事では、例を使用して、MySQL トリガーの原理と使用方法を説明します。ご参考までに、詳細は以...

Mac 環境での Nginx 構成とローカル静的リソースへのアクセスの実装

ローカル開発では、直接アクセスできない静的ファイル リソースのデバッグが必要になる場合があります。こ...

IE6、IE7、IE8 で CSS3 の丸い角と影のスタイルをサポートする

CSS3 の角丸や影の効果を使ったページを作りたいのですが、IE ブラウザでは対応していません。こ...

Dockerコンテナ相互接続の予備的な実践についての簡単な説明

1. Dockerコンテナ間の相互接続Docker は現在、軽量の仮想化ソリューションとなっています...

Ubuntu システムでタイムゾーンと時刻を変更する方法

Linux コンピュータには 2 つの時間があります。1 つはハードウェア時間 (BIOS に記録さ...

Vue はコンポーネント間の通信をどのように実装しますか?

目次1. 父と息子のコミュニケーション1.1 親コンポーネント --> 子コンポーネント1.2...

Mac 向け MySQL のインストールと設定のチュートリアル

この記事では、MacでのMySQLインストールチュートリアルを参考までに紹介します。具体的な内容は次...

MySQLデーモンの起動に失敗したエラーの解決方法

MySQLデーモンの起動に失敗したエラーの解決方法数日前、公開されたウェブサイトはこれらのアクティビ...