Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/string/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/arduino/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql:类似于CONCAT替换-->;性能较轻_Mysql_String_Performance_Search_Concat - Fatal编程技术网

Mysql:类似于CONCAT替换-->;性能较轻

Mysql:类似于CONCAT替换-->;性能较轻,mysql,string,performance,search,concat,Mysql,String,Performance,Search,Concat,因此,我有一个SELECT语句,它将表1列“表1内容”中的当前列内容与表2中另一列(表2内容)的内容进行比较,而“表2内容”中的内容可以在“表1内容”中的任意位置找到: 我的问题是,像CONCAT一样,它的性能非常高 是否有另一种方法可以从不同的表中搜索两列,这样每次执行查询时都不会执行完整的表扫描?像这样的完全自由文本格式(%在搜索字符串的开头和结尾)是性能最重要的部分。字符串开头的通配符是否必要?如果是这样:您可能需要考虑以不同的方式对数据进行预处理,以便搜索可以使用单个通配符或根本不使用通

因此,我有一个SELECT语句,它将表1列“表1内容”中的当前列内容与表2中另一列(表2内容)的内容进行比较,而“表2内容”中的内容可以在“表1内容”中的任意位置找到:

我的问题是,像CONCAT一样,它的性能非常高


是否有另一种方法可以从不同的表中搜索两列,这样每次执行查询时都不会执行完整的表扫描?

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

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

该过程将从原始数据(
id
)和原始字符串中获取密钥作为输入。
该过程的输出将最终出现在一个辅助表
explodestring
中,您现在可以对该表运行一个普通的select(添加一些性能索引)。生成的
id
s将告诉您哪个记录将匹配。

LIKE谓词开头的
%
将禁止使用索引。你可以考虑查看全文搜索。@ TimiGeeleSein FTS也帮不上忙,因为它不能从另一张表中获取匹配数据,它必须是文字。谢谢你的闪电般的速度回答!不可能将数据放在单独的行中,因为我对所需字符串的数量没有特定限制。我可以在不使用多行的情况下用分隔符分割字符串吗?或者我误解了什么吗?请参阅答案更新(稍后)以了解多行方法的工作原理
$select = "SELECT * FROM table_1, table_2 WHERE `table_1_content` LIKE CONCAT('%', table_2_content, '%')";
$result = mysqli_query($con, $select);
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;