INNER JOIN太慢了。它怎么能更快

时间:2016-04-15 10:22:08

标签: php mysql sql

我的代码

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的所有行,其中是测试中出现的数字

1 个答案:

答案 0 :(得分:0)

问题是引擎需要为连接中的每对行(130.000 X 10.000)添加 LIKE 表达式。 此索引在此方案中也无用,因为需要对表达式进行求值以完成连接(并且您不能将该表达式置于索引中)

也许你的架构/架构是问题所在。当没有人根据字符串表达式来表示需要连接两个表时。

可能的解决方案:

(这是一个疯狂的猜测)

很难从您的示例中确定,但如果andmed3.isik包含要在连接中使用的所有可能值,您可以尝试将其放在另一个表中,如下所示:

Andmed3Id    isik
--------- -------
        1 1233213 
        1 8455666
        1 7884555

当然要填充这个表,你需要一个策略,可能的是:在插入/更新中,在一些较晚的时间内批处理。

如果这适合您,只需在查询中再添加一个联接。