我正在创建一个在大约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 |
|---------|
有什么想法吗?
答案 0 :(得分:0)
我知道这可能不完美,但我最终做的是将输入实际连接到字符串中,并将其添加到WHERE IN()。
e.g。在(3,4,5)等地。
但是,如果确实采用这种方法,请注意SQL注入。