不搜索字段和执行%“”%搜索之间的区别

时间:2017-05-12 19:57:03

标签: mysql sql database performance wildcard

起初这看起来似乎是一个愚蠢的问题,但请听我说。

我目前正在改进一个可怕的搜索功能(好吧,多个都用于一个输出),当在~6000个名称的数据库中搜索个人名称的一部分时,他们会在fname LIKE%first_name%和lname LIKE %last_name%和枚举LIKE%employee_number%。问题是,如果您没有指定名字,姓氏或员工编号,搜索,而不是仅在WHERE搜索中指定这些字段,它们只传递从名称输入中检索到的空白字符串(例如, fname LIKE%“”%和lname LIKE%“”%and enum LIKE%“”%。

我对SQ性能非常陌生,更像是一个逻辑网络开发人员,我只是好奇这会对速度和效率产生多大的压力,而不是仅仅将这些字段作为搜索规范包含在内如果他们是空的。

感谢您的帮助:)

3 个答案:

答案 0 :(得分:0)

当然,搜索包含空字段时需要更长的时间而不是 - 除非SQL引擎非常聪明地说“%”匹配所有内容,让我们忽略它,我怀疑。

你问的真正问题是多少 - 而且无法为你解答 - 只有你可以通过性能测试来做到这一点。尝试使用和不使用它并比较结果 - 你不需要那样做。

但是,我会说这个。由于您有时会搜索这些字段,因此它们应该被编入索引 - 甚至可能是索引的复合索引。索引后,搜索6k记录是微不足道的。有和没有空字段之间的性能差异可能变得不值得你努力,你继续更重要的事情。

答案 1 :(得分:0)

如果排除术语而不是执行lname like "%%",性能会略有提高 - 查询select null like "%"返回null,因此需要检查每行的每个值。< / p>

如果您想加快此查询的速度,我建议您在相关列中添加Full Text Search索引。

答案 2 :(得分:0)

有大约6000行,我认为应变只取决于您的硬件和资源可用性(网络托管帐户与专用服务器)。您在排除未填充的输入方面处于正确的轨道,并且应该能够设计一个能够实现这一目标的程序。

如果您使用的是5.7,可以在此处找到相关程序手册:https://dev.mysql.com/doc/refman/5.7/en/if.html 以及有关索引的信息: https://dev.mysql.com/doc/refman/5.7/en/mysql-indexes.html

这些引用基本上适用于任何版本5.x。