我正在为拥有招聘公司的朋友建立一个IT候选人数据库。他有一个包含excel电子表格中数千名候选人的数据库,我正在将其转换为mySQL数据库。
每个候选人都有一个技能领域,他们的技能被列为一个字符串,例如“javascript,php,nodejs ......”等。
我的朋友将在他下面有员工,他们也会搜索数据库,但是我们想要这样做,因此他们仅限于搜索结果,具有特定技能的候选人,具体取决于他们出于安全原因工作的空缺(所以他们不要不会窃取数据库的大部分内容并使用数据设置自己的招聘公司。
因此,如果员工正在处理javascript角色,那么他们将仅限于搜索结果,其中候选人的技能字段中包含“javascript”字样。因此,如果他们搜索所有名为“Michael”的候选人,那么它只会返回具有javascript技能的“Michaels”。
我担心的是,对于每次搜索,搜索可能会花费太长时间,因为它必须扫描技能字段,有时可能是长字符串。
我的担忧是否合理?如果有,有办法优化这个吗?
答案 0 :(得分:1)
如果记录数量达到数千,您可能不会遇到任何速度问题(只需确保您不会比您应该更频繁地查询)。
您已使用' mysql'标记了此问题。标记,所以我假设你正在使用的数据库。请务必添加FULLTEXT index以加快搜索速度。但请注意,此类索引仅适用于从MySQL 5.6开始的INNODB表。
首先尝试内置搜索,但如果您发现它太慢,或者结果不够准确,您可以查看外部全文搜索引擎。我个人对Sphinx search server有很好的经验,可以轻松索引数百万条文本记录并返回良好的结果。
答案 1 :(得分:1)
您的查询将需要全表扫描(除非您使用全文索引)。我强烈建议您通过引入另外两个表来更改数据库中的数据结构:Skills
和CandidateSkills
。
第一个是可用技能列表,包含如下行:
SkillId SkillName
1 javascript
2 php
3 nodejs
第二个会说每个人有哪些技能:
CandidateId SkillId
1 1
2 1
2 2
这会加快搜索速度,但这不是主要原因。主要原因是修复问题并启用以下功能:
Skills
表中。如果您尝试使用全文索引执行所需操作,您将学习一些内容。例如,默认的最小字长为4,如果您的技能包括“C”或“C ++”,这将是一个问题。 MySQL不支持同义词,所以你必须捣乱以获得该功能。而且,如果你拥有多个单词的技能,你可能会得到意想不到的结果。