1

方法 #1 (全文):

CREATE TABLE `addresses` (
  `id` int(10) unsigned NOT NULL auto_increment,
  `mail` text NOT NULL,
  PRIMARY KEY  (`id`),
  FULLTEXT KEY `mail` (`mail`)
);

検索で存在を見つける:

SELECT * FROM addresses WHERE MATCH(email) AGAINST('"name@example.com"' IN BOOLEAN MODE)

または方法 #2 (一意の varchar):

CREATE TABLE `addresses` (
  `id` int(10) unsigned NOT NULL auto_increment,
  `mail` varchar(100) NOT NULL,
  PRIMARY KEY  (`id`),
  UNIQUE KEY `mail` (`mail`)
);

挿入で存在を見つける:

INSERT INTO `addresses` (`id`, `mail`) VALUES (NULL ,  'name@example.com');

失敗した場合は存在します:

#1062 - Duplicate entry 'name@example.com' for key 2 

数千行に存在するメールアドレスを見つけるのに適した方法はどれですか?

4

1 に答える 1

0

方法 3 (一意の varchar を使用) の方が優れています。

SELECT * FROM addresses WHERE email = 'name@example.com'

完全一致の全文検索は良い考えではなく、挿入を使用して何かが存在するかどうかをテストするのは間違っています (ただし、挿入する予定がある場合は正しいですが)。

エンコーディングによっては、一意の制約で大文字と小文字が区別されない場合があることに注意してください。utf-8-bin を使用すると、ベースセンシティブになります。

于 2012-12-06T23:52:39.300 に答える