Mysql: LIKE CONCAT Replacement --> less performance heavy

标签 mysql string performance search concatenation

因此,我有一个 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/

相关文章:

php - REGEX - PHP 仅获取字符串中的粗体部分

android - 将 String 格式的 Facebook JSON created_time 转换为 long 格式

java - 多次迭代列表的性能成本是多少

performance - 从大列表中计算所有差值的算法

mysql - 您可以使用 MySQLdb 的同一连接执行多个原子提交吗

MySQL 存储过程使用 IN 变量名而不是值

MYSQL,查询以按条件分组获取字段中不同值的总和

MySQL 对表数据使用 Pow()

string - MSTest 项目无法获取本地化字符串?

c++ - 如何使用 vtune 分析加法、乘法等的数量