我的ajax搜索查询响应速度慢(2秒)。我相信这与我的逻辑有关。这是我的逻辑描述:
array_intersect
,只留下包含查询中所有单词的结果。我认为我应该对这些词进行union
,或者执行一个包含针对所有单词的AND
语句的select语句。
foreach($searchParts as $part){
$sql="SELECT contacts.id AS contactid
FROM contacts
WHERE contacts.addressbook_id =$addressBookId AND";
$sql.="(contacts.firstname LIKE '%".$part."%' OR ";
$sql.="contacts.middlename LIKE '%".$part."%' OR ";
$sql.="contacts.lastname LIKE '%".$part."%' OR ";
$sql.="contacts.primary_emailaddress LIKE '%".$part."%' OR ";
$sql.="contacts.alternate_emailaddress LIKE '%".$part."%' OR ";
//$sql.="contacts.gender LIKE '%".$part."%' OR ";
$sql.="contacts.personal_address_line1 LIKE '%".$part."%' OR ";
$sql.="contacts.personal_address_line2 LIKE '%".$part."%' OR ";
$sql.="contacts.personal_address_city LIKE '%".$part."%' OR ";
$sql.="contacts.personal_address_zipcode LIKE '%".$part."%' OR ";
$sql.="contacts.company_name LIKE '%".$part."%' OR ";
$sql.="contacts.company_position LIKE '%".$part."%' OR ";
$sql.="contacts.company_address_line1 LIKE '%".$part."%' OR ";
$sql.="contacts.company_address_line2 LIKE '%".$part."%' OR ";
$sql.="contacts.company_address_city LIKE '%".$part."%' OR ";
$sql.="contacts.company_address_zipcode LIKE '%".$part."%' OR ";
$sql.="contacts.home_phonenumber LIKE '%".$part."%' OR ";
$sql.="contacts.company_phonenumber LIKE '%".$part."%' OR ";
$sql.="contacts.cell_phonenumber LIKE '%".$part."%' OR ";
$sql.="contacts.birthday_month LIKE '%".$part."%' OR ";
$sql.="contacts.birthday_day LIKE '%".$part."%' OR ";
$sql.="contacts.birthday_year LIKE '%".$part."%' OR ";
$sql.="contacts.facebook_username LIKE '%".$part."%' OR ";
$sql.="contacts.twitter_username LIKE '%".$part."%' OR ";
$sql.="contacts.googleplus_username LIKE '%".$part."%' OR ";
$sql.="contacts.linkedin_username LIKE '%".$part."%' OR ";
$sql.="contacts.personal_website_url LIKE '%".$part."%')";
$sql.=" ORDER BY contacts.date_created DESC";
$result=mysql_query($sql,$dbh);
if($result && mysql_num_rows($result)){
while(($row=mysql_fetch_assoc($result))!==false){
$tmpArr[$part][]=$row['contactid'];
}
}
}
foreach($tmpArr as $part => $data){
$tmpArr[$part] = array_unique($tmpArr[$part]);
}
if(count($tmpArr)>1){
$tmpArr = array_values(call_user_func_array("array_intersect", $tmpArr));
} else {
$tmpArr = $tmpArr[$searchParts[0]];
}
有什么想法吗?
答案 0 :(得分:0)
我的建议是对包含字符(如varchars)的列以及INT值的REGEXP功能使用全文搜索。
你正在为每个单词执行一个sql语句,你应该尝试改变它来为所有单词执行一个单一的语句 并直接得到结果。这样可以加快查询速度,并且可以让您更轻松地阅读代码。
您还应该考虑使用PDO或mysqli而不是mysql_ *函数,因为不推荐使用mysql_ *函数。
如果您需要更多帮助,请告诉: - )