gpt4 book ai didi

mysql - 如何为搜索项开头只有一个通配符(('%TERM')的文本搜索建立索引?

转载 作者:行者123 更新时间:2023-11-29 12:37:26 24 4
gpt4 key购买 nike

我在 MySQL 慢查询日志中发现了以下查询:

SELECT target_status 
FROM link_repository
WHERE target_url LIKE CONCAT('%', 'bundle/rpi_/activity/rpi_bridge/bridge_manual.pdf')

当我在一次有关页面加载缓慢的对话中向开发经理指出这一点时,他说:

come on; concat() is a simple string concatenation and '%' is the wildcard in the search string. I know that searching strings is not the fastest of operations (that's why we have lucene-like engines, but this is trivial stuff)

link_repository 中有大约 18k 行,这并不多。我找到的文档是字符串索引不适用于通配符。有没有可以使用的替代策略?

最佳答案

为了让 LIKE 使用索引,它必须从某些东西开始。 MySQL 从左到右搜索。因此,如果字符串星号带有任何内容,那么 MySQL 将进行表扫描,并且没有索引将起作用。

但是,如果您使用 InnoDB 表,您可以尝试使用 Full-Text Index .

您可以添加Full-Text Index在列上,然后您可以使用 MATCH AGAINST 函数来查找您需要的内容,然后您可以添加 RIGHT() 子句以仅提供以字符串结尾的结果。

CREATE FULLTEXT INDEX target_url ON target_status(target_url);

然后就可以这样查询记录了

SELECT target_status 
FROM link_repository
WHERE MATCH ('bundle/rpi_/activity/rpi_bridge/bridge_manual.pdf') AGAINST(target_url) AND RIGHT(target_url, 49) = 'bundle/rpi_/activity/rpi_bridge/bridge_manual.pdf'

关于mysql - 如何为搜索项开头只有一个通配符(('%TERM')的文本搜索建立索引?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26557729/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com