gpt4 book ai didi

Mysql: LIKE CONCAT Replacement --> less performance heavy

转载 作者:行者123 更新时间:2023-11-29 06:00:56 24 4
gpt4 key购买 nike

因此,我有一个 SELECT 语句,用于比较 table_1 列“table_1_content”中的当前列内容与 table_2 中另一列 (table_2_content) 的内容,而“table_2_content”中的内容可以在“table_1_content”中的任何位置找到:

$select = "SELECT * FROM table_1, table_2 WHERE `table_1_content` LIKE CONCAT('%', table_2_content, '%')";
$result = mysqli_query($con, $select);

我的问题是 LIKE CONCAT 的性能很重。

有没有别的办法,通过不同表的两列进行搜索,这样每次执行查询时都不需要全表扫描?

最佳答案

完全自由文本格式的LIKE(%在搜索字符串的开头和结尾)是性能的重要部分。字符串开头的通配符是否必要?如果是这样:您可能必须考虑以不同的方式预处理数据,以便搜索可以使用单个通配符或根本不使用通配符。最后一部分(取决于数据)例如通过用分隔符拆分字符串并将数据存储在单独的行中来完成,之后可以使用更快的比较和索引。

要将数据放在多行中,我们假设有一个可用的分隔符(可以是多个,代码只会变得更长):

CREATE TABLE baseinfo (id INT NOT NULL auto_increment primary key,
some other columns);

CREATE TABLE explodedstring(id INT NOT NULL, str VARCHAR(200),
FOREIGN KEY (id) REFERENCES baseinfo(id));

CREATE PROCEDURE explodestring(id int, fullstr VARCHAR(4000))
BEGIN
{many examples exist already how to do this on SO}
END;

该过程将从原始数据(在本例中为 id)和原始字符串作为输入。该过程的输出最终会出现在辅助表 explodedstring 中,您现在可以针对该表运行正常的选择(添加一些索引以提高性能)。生成的 id 会告诉您哪个记录匹配。

关于Mysql: LIKE CONCAT Replacement --> less performance heavy,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44997762/

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