当名字和姓氏存储在不同的列中时,如何搜索全名

时间:2013-11-11 23:51:41

标签: mysql

如果我的名字存储在名为“first_name”的列中,并且姓氏存储在名为“last_name”的列中,我该如何搜索人名?

请注意,此表有几百万条记录,因此我需要一种有效的方法来进行搜索。我正在使用MySQL服务器

列first_name和列last_name都是类型VARCHAR(80)。

到目前为止,我已经尝试过以下工作但速度很慢,因为它因为连接函数而忽略了索引

SELECT first_name, phone FROM people
WHERE CONCAT_WS(' ',first_name, last_name) like '%John Smith%'

我也尝试在(first_name,last_name)上添加索引全文索引 然后是这个查询

SELECT *
FROM people
WHERE MATCH(first_name, last_name) AGAINST('John Smith')

但它不是最快的查询。对这个问题有更好的解决方法吗?

由于

3 个答案:

答案 0 :(得分:2)

我会在FULLTEXT上创建一个(first_name, last_name)索引并使用MATCH()

WHERE MATCH(first_name, last_name) AGAINST ('John Smith')

答案 1 :(得分:2)

尝试独立搜索每个字段:

WHERE first_name = 'James' and last_name = 'Hetfield';

我还要为两者添加一个复合索引,首先使用姓氏,因为它具有更高的基数(更多唯一行),这意味着搜索姓氏“Hetfield”应该比搜索第一个更快名字'詹姆斯'。

ALTER TABLE `some_table` ADD key (`last_name`, `first_name`);

答案 2 :(得分:1)

实际上,如果你想搜索性能,你应该改变你的方法(数百万甚至更多的记录需要更有效的解决方案)。你能为部分列使用NoSQL或FullText搜索解决方案吗?