【发布时间】:2017-12-08 20:04:18
【问题描述】:
我正在使用 4 个表进行选择,其中一个有 670 万行。在 table_1 我有一些主要代码,在 table_2(有 670 万行的那个)我有主要代码的子代码,如下所示:
Table_1 Table_2
| code | | code |
| A1 | | A1A |
| A11 | | A1B |
| A2 | | A2A |
| A22 | | A22 |
规则是,代码总是有一个或两个字母和一个数字(有1、2或3位数字),子代码是相同的代码,或者是相同的代码+一个字母。所以,我做了这样的左连接:
SELECT t1.code, t2.subcode
FROM table_1 t1
LEFT JOIN table_2 t2
ON t2.subcode LIKE t1.code || '%' AND
substr(replace(t2.subcode, t1.code, ''), 1, 1) not in ('0', '1', '2', '3',
'4', '5', '6', '7', '8', '9')
这是可行的,但是,因为 Table_2 有 6.7M 的结果,即使 2 列有索引,查询(与其他 2 个表连接)需要 6~7 分钟才能解决,我需要在更短的时间内完成. 那么,有人知道如何优化这个查询吗?
【问题讨论】: