SQL查询优化JOIN多列



我在Microsoft Access上有两个表:t_data(约200000行)和T_REAF(约1000行)。

t_data有很多列(大约30列),T_REAF有大约10列。

我必须告诉你,我不允许修改这些表,也不允许创建其他表。我必须处理它。

两个表有6列相同。我需要在这6列上连接表,以选择t_data中的所有列和T_REAF中但不在t_data中的列。

我的查询是:

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_data包含很多行(200000),但我认为3分钟太长了。

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

谢谢你的帮助

这需要两个步骤。一种是将查询更改为使用=。我不能百分百确定这是否有必要,但也无妨。第二个是创建索引。

:

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使用索引,从而加快查询速度。

注意,我将表别名更改为表名的缩写。这样可以更容易地遵循查询中的逻辑。

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

注意: Equals(=)操作符是一个比较操作符,用于比较两个值是否相等。因此,在您的查询将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

最新更新