方法#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找出存在:
INSERT INTO `addresses` (`id`, `mail`) VALUES (NULL , 'name@example.com');
如果失败则存在:
#1062 - Duplicate entry 'name@example.com' for key 2
哪种方法更适合查找数千行中存在的邮件地址?
答案 0 :(得分:0)
方法3(使用唯一的varchar)更好:
SELECT * FROM addresses WHERE email = 'name@example.com'
FullText搜索完全匹配并不是一个好主意,并使用插入来测试是否存在某些内容是错误的(尽管如果您计划插入它是正确的)。
请注意,唯一约束可以不区分大小写,具体取决于编码。如果你使用utf-8-bin,它将是基本敏感的。