在我的 html 页面上,用户可以选择输入文本字符串、复选标记选项或同时执行这两种操作。然后,该数据被放置在显示该数据的 mysql 查询中。
允许用户输入字符串的事实意味着我在 mysql 查询中使用了 LIKE 函数。
如果我错了,请纠正我,但我相信 LIKE 函数可以大大减慢查询速度。 关于上面的陈述,我想知道LIKE函数中的空字符串是否会产生影响,例如:
select * from hello;
select * from hello where name like "%%";
如果它确实产生了重大影响(我相信这个数据库会变得越来越大),您对如何处理这个问题有什么想法。
我的第一个想法是我会有两个查询: 具有类似功能的一款 以及没有类似功能的一种。根据用户输入的内容,将调用正确的查询。
例如,如果用户将搜索框留空,则不需要like函数,因此它将发送一个空字符,并且if语句在看到时将选择另一个选项(没有like功能)有一个空字符。
有更好的方法吗?
最佳答案
一般来说,LIKE
函数会很慢,除非它以固定字符串开头并且列有索引。如果您执行LIKE 'foo%'
,它可以使用索引查找以foo
开头的所有行,因为MySQL 索引使用B 树。但是 LIKE '%foo'
无法使用索引,因为 B 树仅优化查找前缀;这必须对整个表进行顺序扫描。
即使您使用带有前缀的版本,性能改进也取决于该前缀减少了必须搜索的行数的程度。如果您执行LIKE 'foo%bar'
,并且 90% 的行以 foo
开头,则仍然需要扫描表的 90% 来测试它们是否结束与栏
。
由于 LIKE '%%'
没有固定前缀,因此即使实际上没有任何内容可搜索,它也会对表执行完整扫描。最好您的 PHP 脚本测试用户是否提供了搜索字符串,如果没有任何内容可搜索,则省略 LIKE
测试。
关于php - MySQL 类似函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24706127/