2012-12-06 77 views
1

方法#1(全文):MySQL全文索引或唯一VARCHAR性能

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('"[email protected]"' 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 , '[email protected]'); 

,如果失敗,則存在:

#1062 - Duplicate entry '[email protected]' for key 2 

其方法是找出存在的郵件地址在數千行的更好嗎?

回答

0

方法3(與獨特的varchar)是更好的:

SELECT * FROM addresses WHERE email = '[email protected]' 

全文檢索的精確匹配是不是一個好主意,並使用插入來測試是否存在的東西是錯誤的(雖然正確的,如果無論你打算如何插入它)。

請注意,根據編碼,唯一約束可能不區分大小寫。如果你使用utf-8-bin,它將是基本敏感的。