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

标签 mysql

如果我的名字存储在名为“first_name”的列中,而姓氏存储在名为“last_name”的列中,我该如何搜索一个人的全名

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

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

到目前为止,我已经尝试了以下方法,但效果很慢,因为它由于 concat 函数而忽略了索引

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

我也试过在(名字,姓氏)上添加索引全文索引 然后这个查询

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

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

谢谢

最佳答案

尝试独立搜索每个字段:

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

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

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

关于mysql - 当名字和姓氏存储在不同的列中时如何搜索全名,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19918323/

相关文章:

mysql - 如何在 MySQL 中将小时添加到当前日期

mysql - Grails 投影不返回所有属性且未分组

java - 在 MySQL 中写入时间

mysql - Percona 的 my.cnf 文件在哪里?

Java MySQL BigDecimal 列不能为空

mysql - MySQL 中的相交等效项

mysql - MySQL慢查询日志的时间单位是什么?

php - 重命名上传文件并显示它

mysql - 使用并集从多个表中选择计数相关行第 2 部分

php - 在具有父子关系的 mysql 中回溯?