我在Microsoft Access上有两个表:T_DATAS(大约200 000行)和T_REAF(大约1000行)。
T_DATAS有很多列(大约30列),T_REAF有大约10列。
我必须告诉你,我不允许更改这些表,也不允许创建其他表。我必须使用它。
两个表都有6列相同。我需要连接这6列的表,从T_DATAS中选择所有列,在T_DATAS中选择但不在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分钟对于此查询来说太长了。
您能告诉我这个查询有什么问题吗?
非常感谢你的帮助
答案 0 :(得分:3)
这两个步骤。一种是将查询更改为使用=
。如果这是必要的话,我不是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
的索引来加速查询。
请注意,我将表别名更改为表名的缩写。这样可以更轻松地遵循查询中的逻辑。
答案 1 :(得分:2)
我假设这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