我的代码
SELECT * FROM andmed3 INNER JOIN test ON andmed3.isik like concat('%', test.isik, '%')
在andmed3中我有130 000行,在测试中我有10 000行,它不会运行。 当我将其限制为0,500时,它将查询大约2-3分钟。
怎么会更好?
andmed3 table
id name number isik link stat else
-----------------------------------------------
1 john 15 1233213 none 11 5
8455666
7884555
测试表
id isik
-----------
45 8455666
所以我需要来自andmed3的所有行,其中是测试中出现的数字
答案 0 :(得分:0)
问题是引擎需要为连接中的每对行(130.000 X 10.000)添加 LIKE 表达式。 此索引在此方案中也无用,因为需要对表达式进行求值以完成连接(并且您不能将该表达式置于索引中)
也许你的架构/架构是问题所在。当没有人根据字符串表达式来表示需要连接两个表时。
可能的解决方案:
(这是一个疯狂的猜测)
很难从您的示例中确定,但如果andmed3.isik包含要在连接中使用的所有可能值,您可以尝试将其放在另一个表中,如下所示:
Andmed3Id isik
--------- -------
1 1233213
1 8455666
1 7884555
当然要填充这个表,你需要一个策略,可能的是:在插入/更新中,在一些较晚的时间内批处理。
如果这适合您,只需在查询中再添加一个联接。