我的密码
SELECT * FROM andmed3 INNER JOIN test ON andmed3.isik like concat('%', test.isik, '%')
在andmed3中,我有13万行,而在测试中,我有1万行,它不会运行。
当我将其限制为0,500时,它将查询2-3分钟。
怎么会更好呢?
andmed3表
id name number isik link stat else
-----------------------------------------------
1 john 15 1233213 none 11 5
8455666
7884555
测试台
id isik
-----------
45 8455666
所以我需要来自andmed3的所有行,其中是测试中出现的数字
最佳答案
问题在于,引擎问题需要为联接中的每一对行设置LIKE表达式(130.000 X 10.000)。
在这种情况下,索引也是无用的,因为需要对表达式进行求值才能完成连接(并且您不能将表达式放在索引内)
可能是您的体系结构/架构存在问题。如果没有人预料到需要基于字符串表达式连接两个表。
可能的解决方案:
(这是一个疯狂的猜测)
从您的示例很难确定,但是如果andmed3.isik包含要在连接中使用的所有可能值,则可以尝试将其放在另一个表中,如下所示:
Andmed3Id isik
--------- -------
1 1233213
1 8455666
1 7884555
当然,要填充该表,您需要一个策略,可能的策略是:在插入/更新中,在某个小时的后期中进行批量处理。
如果适合,您只需要在查询中再添加一个联接即可。