准备 sql 查询以使查询简约或做很多喜欢更快


What is faster preparing a sql query to make the query minimalistic or doing a lot of likes?

我有一个数据库,大约有 100.000 个客户可供搜索,我的搜索表单会更好、更快:

会不会更好

if(strlen($_POST['firstname']))
{
   $search .= "AND `firstname` like :firstname";
}
if(strlen($_POST['lastname']))
{
   $search .= "AND `lastname` like :lastname";
}
// and so on for about 16 possible fields

还是要做

$query = $this->db->query("SELECT * FROM `customers`
                           WHERE `firstname` LIKE :firstname,
                           AND `lastname` LIKE :lastname,
                           -- AND so on for about 16 elements");
我已经很久

没有使用 mysql 了,所以我会根据我的 sqlserver 经验给出一个大致的答案(如果我跑题了,请原谅我)

我假设您在所有 16 列上都有索引(或者至少是始终提供相关值的列)

在SQL Server中,我不会选择第二个选项,因为:

  • NULL LIKE '%'始终为 false(在 sqlserver 中,您的第二个查询不会返回任何具有 null 值的行)
  • 优化程序会根据表统计信息执行过于通用的操作。当高优先级子句只有"%"时,这将导致可怕的性能(请注意,在 sqlserver 中,您可以有查询提示告诉对始终提供相关值的列使用一些索引)

我在第二种情况下看到的唯一一点是要解释的代码较少(php 端和 mysqlside)但恐怕不值得。

希望这会有所帮助,不要忘记对您的条目进行消毒

这两个代码块不相等。
如果没有填写名字,后者将一无所获,而前者将搜索姓氏。

在使用 LIKE 时询问"哪个更快"是没有意义的 - 无论您选择哪种语法,它总是很慢。