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 5.7.19 無料インストール バージョンで遭遇した落とし穴 (コレクション)

1. 公式ウェブサイトから 64 ビットの zip ファイルをダウンロードします。 2. インスト...

DockerにTensorFlow環境を素早くインストールする方法

Docker に TensorFlow 環境をすばやくインストールし、TensorFlow を使用し...

Vue は検証コードのカウントダウンボタンを実装します

この記事では、検証コードカウントダウンボタンを実装するためのVueの具体的なコードを例として紹介しま...

CSS 共通スタイルで二重矢印を描画するサンプルコード

1. 単一の矢印への複数の呼び出し単一の矢印を実装したら、二重矢印を実装するのは簡単です。上では、単...

Ubuntu で apt-get を使用して mysql をインストールおよび完全にアンインストールする方法の詳細な説明

1. mysqlをインストールします。 udo apt-getでmysql-serverをインストー...

MySQLを水平から垂直に、垂直から水平に変換する方法

データの初期化 `test_01` が存在する場合はテーブルを削除します。 テーブル「test_01...

JavaScript 関数のパフォーマンスを測定するさまざまな方法の比較

目次概要パフォーマンス.nowコンソール.time時間精度を短縮注意事項分割して征服する入力値に注意...

Linux での MySQL のインストールに関するチュートリアル

目次1. 古いバージョンを削除する2. サーバーのカーネルタイプを確認し、適切なバージョンをダウンロ...

iframe パラメータの説明と例

<iframe src=”test.jsp” width=”100″ height=”50″ ...

CocosCreator Huarongdaoデジタルパズルの詳しい説明

目次序文文章1. パネル2. 華容島ソリューション3. コード4. 注記序文華容路とは何ですか? 誰...

MySQL パフォーマンスの包括的な最適化方法リファレンス、CPU、ファイルシステムの選択から mysql.cnf パラメータの最適化まで

この記事では、一般的な MySQL 最適化方法をいくつかまとめて簡単に紹介します。これは、フルタイム...

CSS でショートカット プロパティを記述する際は、トラブルの順序に注意してください (落とし穴を避けるため)

ショートハンドプロパティは、複数のプロパティに同時に値を割り当てるために使用されます。たとえば、fo...

Linux で開いているファイルが多すぎる問題を解決する方法

原因は、プロセスが特定の時点でシステム制限を超える数のファイルと通信リンクを開くことです。 システム...

Nginx 500 内部サーバーエラーの解決方法

今日、Nginxを使っていたら500エラーが発生しました。エラーコードを検索してみんなに共有しました...

Vue2.0+ElementUI+PageHelperで実装されたテーブルページング機能

序文最近、いくつかのフロントエンド プロジェクトに取り組んでおり、ページにいくつかのテーブルを表示す...