多个在(选择)慢的地方

时间:2014-12-29 19:57:32

标签: mysql performance where

我正在创建一个在大约700k行的数据库中搜索结果的过程。

看起来像这样(有点简化):

BEGIN
    SET `page` = `page`*8;
    SELECT 
        businessName

        FROM tbl_business as bs

        INNER JOIN tbl_categories as ct
            ON ct.catId = bs.catId

        WHERE 
            (
             MATCH(businessName, businessShortDescription) AGAINST (`q`) 
             OR 
             businessName like CONCAT(`q`, '%')
            )

            AND
            (
             bs.catId IN (SELECT * FROM tmp_search_child_cats) 
             OR 
             ct.catPId IN (SELECT * FROM tmp_search_parent_cats)
            )

        ORDER BY score DESC

        LIMIT `page`, 8;
END

catPId是父ID,类别可以拥有父级。可怕的解决方案,但我正在使用旧的数据库。

我需要这个快速闪电(在几毫秒内)。

临时表只有一列具有类别ID,如下所示:

|-- cat --|
|    5    |
|   234   |
|    9    |
|---------|

有什么想法吗?

1 个答案:

答案 0 :(得分:0)

我知道这可能不完美,但我最终做的是将输入实际连接到字符串中,并将其添加到WHERE IN()。

e.g。在(3,4,5)等地。

但是,如果确实采用这种方法,请注意SQL注入。