[解決済み] UNIQUE 制約は自動的にフィールドに INDEX を作成しますか?
2022-09-18 23:53:50
質問
私は
別のインデックスを定義する
の上に
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;
EDIT
: 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
どのように解決するのですか?
A
一意のキー
はインデックスの特殊なケースで、一意性のチェックが追加された通常のインデックスのように動作します。使用方法
SHOW INDEXES FROM customer
を使うと、一意なキーが実際にはB-treeタイプのインデックスであることがわかります。
A
複合インデックス
で
(email, user_id)
で十分であり、電子メールのみについて別のインデックスを作成する必要はありません。インデックスのサイズによってクエリが遅くなるようなボーダーケースもあるかもしれませんが、実際に遭遇するまで気にする必要はないでしょう。
インデックス使用のテストに関しては、オプティマイザが実際にそのインデックスを使用する価値があると考えるように、まずテーブルをいくつかのデータで満たす必要があります。
関連
-
MySQLデータベース・インデックスの左端一致の原則
-
MySQLのLike演算子に関する詳細
-
MySQLのWhereの使用方法について説明します。
-
MysqlからElasticsearchにデータを同期させる方法を説明します。
-
MySQL XAが分散型トランザクションを実装する方法を1記事にまとめました。
-
Mysqlのソート機能の詳細
-
Mysqlの使用中に発生したエラーの一部
-
[解決済み] なぜ SQLAlchemy の count() は生のクエリよりずっと遅いのでしょうか?
-
[解決済み] Mysqlでidを使用してテーブルから多くの行を削除する
-
[解決済み] リスト内のアイテムのインデックスを検索する
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
MySQL Innodb インデックスメカニズム詳細解説
-
MySqlの整数インデックスと文字列インデックスの失敗または暗黙の変換問題
-
MySQL インタビューの質問 - ハッシュインデックスを設定する方法
-
MySQLの悲観的ロックと楽観的ロックの実装スキーム
-
[解決済み】マルチパート識別子をバインドできませんでした。
-
[解決済み】DynamoDB : 提供されたキー要素がスキーマと一致しません。
-
MySQLにおけるvarchar型とchar型の違い
-
SQL Server のトランザクションは、try キャッチに記述しなければ、中間ステートメントがエラーを報告してもコミットされます。
-
MySQLでテーブルを削除します。親行が削除または更新できません: 外部キー制約に失敗しました。
-
[解決済み] SQLを使用してSUMとSUBTRACTを行うには?