php - MySQL 类似函数

标签 php html mysql sql

在我的 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/

相关文章:

html - 此页面上的第二个滚动条 - 不需要

php - krajee引导文件输入

c# - ASP.NET MVC EF 和 MySQL

php - Laravel 5.2 自定义认证错误

php - 无法将新用户插入 mysql 数据库

php - 从您的页面接收对YouTube视频访问的确认

php - 获取 pdo mysql 错误

php - 使用 PHP 的 DomDocument appendChild 时保留换行符

html - 将带有叠加层的 div 中的文本置于最前面,以便不透明度不会影响文本颜色?

javascript - 不选择值自动获取多选所有值并显示