-3

我正在使用 Mysql 5.5.16。我有一个查询,我使用联合运算符组合了 3 个查询...每个查询包含超过 10000 条记录。

我的查询看起来像...

$search_qry1 = " (SELECT PC_name as name FROM profile_category_tbl WHERE PC_status=1 and PC_parentid!=0  and (";
$search_qry2 = " (SELECT PROFKEY_name as name FROM profile_keywords_tbl WHERE PROFKEY_status=1 and (";
$search_qry3 = " (SELECT COM_name as name FROM ".$C."_company_profile_tbl WHERE COM_status=1 and (";
$order_by = "ORDER BY";
$word_length = explode(" ", $my_data);

for($i=0; $i <= count($word_length) - 1; $i++) {
    $dt = $word_length[$i];
    if ($dt) {
        if ($i == 0) {
            $or="";
        }
        else {
            $or="OR";
        }

        $search_qry1 .= " $or regex_replace('[^a-zA-Z0-9\-]','',remove_specialCharacter(PC_name)) LIKE '%$dt%' ";
        $search_qry2 .= " $or regex_replace('[^a-zA-Z0-9\-]','',remove_specialCharacter(PROFKEY_name)) LIKE '%$dt%' ";
        $search_qry3 .= " $or regex_replace('[^a-zA-Z0-9\-]','',remove_specialCharacter(COM_name)) LIKE '%$dt%' ";
        $order_by .= " IF(name LIKE '%$dt%',1,0) ";
    }
    if ($i == count($word_length) - 1) {
        $search_qry1 .= ")";
        $search_qry2 .= ")";
        $search_qry3 .= ")";
    }
    if ($i != count($word_length) - 1) {
        $order_by .= "+ "; 
    }
}
$search_qry1 .= " GROUP BY PC_name  )";
$search_qry2 .= " GROUP BY PROFKEY_name  )";
$search_qry3 .= " GROUP BY COM_name  )";

$search_qry = "select name from ( $search_qry1 UNION ALL $search_qry2 UNION ALL $search_qry3 )a $order_by desc LIMIT 0,25";

它工作得很好......但是执行它需要时间 - 每次搜索超过 4 秒......如何减少它的执行时间?....如果有人知道这方面的想法,请让我知道....

实际上,我运行此查询以进行自动完成搜索。如果Rest在搜索框中输入“”,则

The Output Should be, 

Family Restaurants
Everest Park
Fast Food Restaurants
Everest Park Residency
Fish Restaurant
Everest Power Solution
Fish Restaurants

提前致谢,
杰尼

4

2 回答 2

0

您正在使用regex_replaceand like "%foobar%",这实际上会减慢您的查询显着性,因为 mySql 必须对每一行进行全文搜索和正则表达式操作。如果在获取结果后使用 php 而不是 mysql 执行这些操作,可能会更快。

于 2013-08-27T07:57:44.793 回答
0

主要问题是您正在对每个表进行全面扫描以检查类似 '%$dt%' 的情况。无论您在桌面上有哪些索引,都不会使用它们。

但是,如果您发布最后的 SQL 语句以及您想要做什么,也许我们可以提供帮助。

于 2013-08-27T08:00:52.730 回答