首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何搜索列的一部分?

问如何搜索列的一部分?
EN

Stack Overflow用户
提问于 2009-08-08 11:41:53
回答 4查看 195关注 0票数 1

我有一个包含4000万条记录的mysql表,该表由一个我无法控制的进程填充。每月仅添加一次数据。此表需要能够按名称列进行搜索。但“名称”列包含的全名格式为“Last First Middle”。

在sphinx.conf中,我有

代码语言:javascript
复制
sql_query = SELECT Id, OwnersName,
substring_index(substring_index(OwnersName,' ',2),' ',-1) as firstname, 
substring_index(OwnersName,' ',2) as lastname
FROM table1

如何使用sphinx搜索按名字和/或姓氏进行搜索?我希望只在名字中搜索“Smith”?

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2009-08-10 21:47:04

从其他答案来判断,我可能漏掉了一些东西。但是,要将Sphinx中的搜索限制到特定字段,请确保您使用的是扩展(或extended2)匹配模式,然后使用以下查询字符串:@firstname Smith。

票数 1
EN

Stack Overflow用户

发布于 2009-08-08 11:51:29

对于可能变大的表,SQL查询中的每行函数始终不是一个好主意。如果要搜索列的一部分,则应将其提取到自己的列中并对其进行索引。

我建议,如果您有能力控制模式(而不是填充过程),则插入名为OwnersFirstName和OwnersLastName的新列以及一个update/insert触发器,该触发器从OwnersName中提取相关信息并适当地填充新列。

这意味着,只有当一行发生更改时,才会计算出名字,而不是每次运行查询时。这是做这件事的好时机。

那么你的查询就会变得令人眼花缭乱。是的,这打破了3NF,但大多数人没有意识到,如果您了解后果,出于性能原因这样做是可以的。而且,由于新列是由触发器控制的,因此引起关注的数据重复是“干净的”。

人们对数据库的大多数问题是他们的查询速度。浪费一点磁盘空间来获得大量的性能改进通常是可以的。

如果您完全无法控制模式,另一种可能是使用“正确的”模式创建您自己的数据库,并定期从实际数据库填充它。然后查询你的。然而,这可能会涉及到每个月相当多的数据传输,所以如果允许的话,第一个选择是更好的选择。

票数 4
EN

Stack Overflow用户

发布于 2009-08-08 11:52:12

您可以使用子字符串来获取要在其中搜索的字段部分,但这会减慢该过程。查询不能使用任何类型的索引来进行比较,因此它必须触及表中的每条记录。

最好不要在同一个字段中存储多个值,而是将name组件放在三个单独的字段中。当您在一个字段中存储多个值时,访问数据几乎总是出现一些问题。我在不同的论坛上一次又一次地看到这一点。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1248644

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档