UNIQUE制約は、フィールドにINDEXを自動的に作成しますか? 質問する

UNIQUE制約は、フィールドにINDEXを自動的に作成しますか? 質問する

したほうがいい別のインデックスを定義する列に(検索目的で)インデックスを追加するか、制約emailとともにインデックスが「自動的に」追加されるのでしょうか?UNIQ_EMAIL_USER

CREATE TABLE IF NOT EXISTS `customer` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `user_id` int(11) NOT NULL,
  `first` varchar(255) NOT NULL,
  `last` varchar(255) NOT NULL,
  `slug` varchar(255) NOT NULL,
  `email` varchar(255) NOT NULL,
  `created_at` datetime NOT NULL,
  `updated_at` datetime NOT NULL,
  PRIMARY KEY (`id`),
  UNIQUE KEY `UNIQ_SLUG` (`slug`),
  UNIQUE KEY `UNIQ_EMAIL_USER` (`email`,`user_id`),
  KEY `IDX_USER` (`user_id`)
) ENGINE=InnoDB;

編集: Corbin の提案に従って、EXPLAIN SELECT * FROM customer WHERE email = 'address'空のテーブルに対してクエリを実行しました。これが結果ですが、どのように解釈すればよいかわかりません。

id select_type type possible_keys key  key_len ref  rows Extra
1  SIMPLE      ALL  NULL          NULL NULL    NULL 1    Using where

IXD_EMAIL をテーブルに追加するときに、同じクエリで次が表示されます:

id select_type type possible_keys key       key_len ref   rows Extra
1  SIMPLE      ref  IDX_EMAIL     IDX_EMAIL 257     const 1    Using where

ベストアンサー1

ユニークキーはインデックスの特殊なケースであり、一意性のチェックが追加された通常のインデックスのように動作します。を使用すると、SHOW INDEXES FROM customer一意のキーが実際には B ツリー タイプのインデックスであることがわかります。

複合インデックス(email, user_id)十分です。電子メールのみに別のインデックスは必要ありません。MySQL は複合インデックスの左端の部分を使用できます。インデックスのサイズによってクエリの速度が低下する可能性がある境界ケースがいくつかありますが、実際に遭遇するまでは心配する必要はありません。

インデックスの使用をテストするには、まずテーブルにいくつかのデータを入力して、そのインデックスを使用する価値があるとオプティマイザーに判断させる必要があります。

おすすめ記事