SQL查询优化JOIN多列

SQL query Optimisation JOIN multiple column

我在 Microsoft Access 上有两个表:T_DATAS(大约 200 000 行)和 T_REAF(大约 1000 行)。

T_DATAS 有很多列(大约 30 列)而 T_REAF 大约有 10 列。

我必须告诉你,我不能更改那些表,也不能创建其他表。我必须使用它。

两个表都有 6 列相同。我需要将这 6 列上的表连接到 select T_DATAS 中的所有列以及 T_REAF 中但不在 T_DATAS 中的列。

我的查询是:

SELECT A.*, B.CARROS_NEW, B.SEGT_NEW, B.ATTR INTO FINALTABLE FROM T_DATAS A LEFT JOIN T_REAF B ON A.REGION LIKE B.REGION AND A.PAYS LIKE B.PAYS AND A.MARQUE LIKE B.MARQUE AND A.MODELE LIKE B.MODELE AND A.CARROS LIKE B.CARROS AND A.SEGT LIKE B.SEGT

我得到了我需要的结果,但问题是此查询花费的时间太长,无法给出结果(大约 3 分钟)。 我知道 T_DATAS 包含很多行 (200 000),但我认为 3 分钟对于此查询来说太长了。

你能告诉我这个查询有什么问题吗?

非常感谢您的帮助

我假设这 6 列相同,也可能具有相同的数据类型。

注意: 等号 (=) 运算符是比较运算符 - 比较两个值是否相等。因此,在您的查询中将 LIKE 替换为 = 并查看结果时间。

SELECT A.*
      ,B.CARROS_NEW
      ,B.SEGT_NEW
      ,B.ATTR
       INTO FINALTABLE
FROM   T_DATAS A
       LEFT JOIN T_REAF B
            ON  A.REGION = B.REGION
                AND A.PAYS = B.PAYS
                AND A.MARQUE = B.MARQUE
                AND A.MODELE = B.MODELE
                AND A.CARROS = B.CARROS
                AND A.SEGT = B.SEGT

两个步骤。一种是将查询更改为使用 =。我不是 100% 确定这是否有必要,但它不会造成伤害。二是创建索引。

所以:

SELECT D.*, R.CARROS_NEW, R.SEGT_NEW, R.ATTR
INTO FINALTABLE
FROM T_DATAS D LEFT JOIN
     T_REAF R
     ON D.REGION = R.REGION AND
        D.PAYS = R.PAYS AND
        D.MARQUE = R.MARQUE AND
        D.MODELE = R.MODELE AND
        D.CARROS = R.CARROS AND
        D.SEGT = R.SEGT;

其次,您想要 T_REAF 上的索引:

CREATE INDEX IDX_REAF_6 ON T_REAF(REGION, PAYS, MARQUE, MODELE, CARROS, SEGT);

然后 MS Access 可以使用 JOIN 的索引,加快查询速度。

请注意,我将 table 别名更改为 table 名称的缩写。这样可以更轻松地遵循查询中的逻辑。