MySQL全文或唯一的varchar性能

时间:2012-12-06 23:48:53

标签: mysql performance full-text-search varchar

方法#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 

哪种方法更适合查找数千行中存在的邮件地址?

1 个答案:

答案 0 :(得分:0)

方法3(使用唯一的varchar)更好:

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

FullText搜索完全匹配并不是一个好主意,并使用插入来测试是否存在某些内容是错误的(尽管如果您计划插入它是正确的)。

请注意,唯一约束可以不区分大小写,具体取决于编码。如果你使用utf-8-bin,它将是基本敏感的。