我需要搜索不区分大小写的关键字。为此,我使用以下查询。合乎逻辑的好吧,但性能会急剧下降。
表格信息
item_tbl: 558991075
keywords: 2000
SELECT itemname from items i
LEFT JOIN keywords k
ON i.id = k.item_id
AND lower(i.itemname) LIKE CONCAT('%', lower(k.value), '%')
WHERE l.item_id is null
示例:
Keywords:
Iphone x
Yellow Mango
Red onion
Item names:
Some Item 1
Red color Iphone X
Big Yellow Mango
最终有效项是Some Item 1
。
有什么方法可以提高这个查询性能吗?
1条答案
按热度按时间t3irkdon1#
花费时间最多的可能是
like
。如果您要经常使用这个查询,并且它不是一次性的,那么您应该尝试并预先计算它。或者,您应该尝试将其设置为直接连接。有没有分隔符可以用来减少与
like
比较的项目数。在使用like
时,基本上必须将每条记录与其他记录进行比较。explode(split(i.itemname, ' ')) as words
的“单词”lower(split(k.value, ' ')[0]) = lower(words)
的‘word’上加入where lower(i.itemname) LIKE CONCAT('%', lower(k.value), '%')
这将使联接的能力能够将数据发送到正确的Reducer,并减少比较的数量。