我有一个查询,根据用户提供的短语(例如“ge”)从topics
表中选择行。每个用户都有他们关注的主题列表。我按priority
列(作为别名)订购结果:
我使用的查询UNION
:
SELECT id, name, 4 as priority FROM `topics`
WHERE id IN(17, 18, 19, 20, 21) AND name LIKE 'ge'
UNION
SELECT id, name, 3 as priority FROM `topics`
WHERE id IN(17, 18, 19, 20, 21) AND name LIKE '%ge%'
UNION
SELECT id, name, 2 as priority FROM `topics`
WHERE name LIKE 'ge%'
UNION
SELECT id, name, 1 as priority FROM `topics`
WHERE name LIKE '%ge%'
ORDER BY priority DESC
查询工作正常 - 它获取匹配结果并按priority
从最高到最低排序。
我需要的是提出实现相同目标的替代查询/查询,以比较其100 000条记录的速度。
上面的查询有什么好的替代方案?我应该关注子查询吗?加入?我想以最有效的方式结束。
答案 0 :(得分:0)
您可以替换
WHERE name LIKE 'ge%'
和
的类似替代方案WHERE MATCH(name) AGAINST('ge*' IN BOOLEAN MODE)
答案 1 :(得分:0)
部分加速是创建一个TEMPORARY TABLE,其中所有行WHERE NAME LIKE'%ge%',然后在该表上运行UNION。临时表(希望)会更小,因此更快。
不要屏住呼吸;这个想法可能不是那么好。