什么是更快的准备SQL查询,使查询简约或做了很多喜欢?

时间:2013-01-25 09:14:54

标签: php mysql

我有一个数据库,大约有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");

2 个答案:

答案 0 :(得分:1)

我很长一段时间没有使用过mysql,所以我会根据我的sqlserver经验给出一般性的答案(如果我偏离主题,请原谅我)

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

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

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

我在第二种情况下看到的只有更少的代码要解释(php方面和mysqlside) 但我担心这不值得。

希望这会有所帮助,并且不要忘记清理您的参赛作品

答案 1 :(得分:0)

这两个代码块不相等 如果没有填充firstname,后者将找不到任何内容,而前者将搜索lastname。

在你使用LIKE时问“哪个更快”没有意义 - 无论你选择哪种语法,它都会总是慢。