我有一个很长的查询,如果id_cat列与用户搜索匹配,则返回一些记录。
看起来像这样:
SELECT * FROM table WHERE (id_cat = 50 OR id_cat = 51 OR id_cat = 52...) up to some high numbers.
在上述情况下,查询变得很大,这增加了响应时间。
我需要对此进行优化,因为响应时间接近15秒(基本上它会搜索所有类别)。
我应该如何做?
首先,我正在考虑建立如下查询:
SELECT * FROM table WHERE (id_cat = (50 OR = 51 OR = 52))
这应减少sql单词的数量,但它不能像这样工作(返回null而不是行)。而且我没有其他想法了。
您对此有什么建议吗?
首先,使用in
建立查询:
SELECT *
FROM table
WHERE id_cat IN (50, 51, 52, . . .);
MySQL使用常量值优化IN
。没有索引,仍然存在全表扫描。因此,我还建议在table(id_cat)
上使用索引。