我有一个数据库,大约有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");
答案 0 :(得分:1)
我很长一段时间没有使用过mysql,所以我会根据我的sqlserver经验给出一般性的答案(如果我偏离主题,请原谅我)
我假设您的所有16列都有索引(或者至少是那些始终提供相关值的索引)
在SQL Server中,我不会选择第二个选项,因为:
NULL LIKE '%'
始终为false(在sqlserver中,您的第二个查询不会返回任何具有空值的行)我在第二种情况下看到的只有更少的代码要解释(php方面和mysqlside) 但我担心这不值得。
希望这会有所帮助,并且不要忘记清理您的参赛作品
答案 1 :(得分:0)
这两个代码块不相等 如果没有填充firstname,后者将找不到任何内容,而前者将搜索lastname。
在你使用LIKE时问“哪个更快”没有意义 - 无论你选择哪种语法,它都会总是慢。