私は必要があります別のインデックス定義に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;
編集:コービンによって提案されたように私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
UNIQUE制約は技術的にはインデックスを必要としません...しかし、標準がそれを定義する方法またはMySQL(どのバックエンド、btw?)がそれを実装するかはわかりません。MySQLで手動ですばやく見つけることができるのは、「一意のインデックスは、インデックス内のすべての値が異なる必要があるような制約を作成すること」です。
個々のインデックスとカバリング(AKAコンポジット-複数の列)インデックスを実装してテストする必要があります。使用状況やデータにより異なります。
—
OMGポニー
私は99%確かにそれがインデックスを作成することを確信しています。一意のテーブルを作成し、場所を使用して選択について説明するだけです。
—
コービン2012年
@Corbinはそれをしました、私は結果をどのように解釈すべきですか?
—
gremo 2012年
一意制約をインデックスとして使用しましたか?ちなみに、非常に大きなテーブルを使用する必要がある場合や、単にテーブルスキャンを実行する場合があります。
—
コービン2012年