SELECT status_master.*
FROM 100_orders_open
INNER JOIN status_master
ON [100_orders_open].OEHISORD_DOC_NO = status_master.OESTATUS_DOC_NO;
status_master 是一个包含110万行的本地表。
100_orders_open 是一个查询,它将包含107,441行的本地表 order_master 过滤为301行。
在8gb ram机器上查询需要47秒。 我无法改进硬件。
有没有办法提高查询效果?
答案 0 :(得分:1)
以下是一些策略:
*
。返回较少的列可能会提高性能。100_orders_open
查询转换为临时表以重新启动ACE引擎优化程序的另一个查询过程。使用make-table查询(SELECT * INTO newtable FROM query
)。和索引临时表。JOIN
语句(即OESTATUS_DOC_NO
和查询的源表字段OEHISORD_DOC_NO
)。答案 1 :(得分:1)
您需要构建并将其他视图(查询)组合到上面的查询中。正如其他人所述,其他查询中使用的列被编入索引,当然OESTATUS_DOC_NO也被编入索引。
由于您声明其他查询仅返回300行,因此如果可以在此处使用索引,则此查询可能会在即时附近执行。
所以你必须放弃对查询的查询(或在视图上查看),并尝试将查询作为一个整体来编写 - 而不是两个单独的查询。
答案 2 :(得分:0)
我不确定Access是否有很多查询优化器,但我认为:
SELECT status_master.*
FROM status_master
JOIN 100_orders_open
ON status_master.OESTATUS_DOC_NO = [100_orders_open].OEHISORD_DOC_NO
或
SELECT * from status_master WHERE status_master.OESTATUS_DOC_NO IN (SELECT [100_orders_open].OEHISORD_DOC_NO from 100_orders_open)
会更快。
不知道你在哪里,但我要补充一点,下面其他人提到的索引非常重要。我有点认为你已经知道了,但不应该。另外,我对Access一直不熟悉,但100_orders_open视图实际上每次打开时都会运行查询。这个视图的SQL是什么?将SQL中必要的内容整合到此查询中可能也会快得多。
答案 3 :(得分:0)
对于此查询:
SELECT status_master.*
FROM 100_orders_open INNER JOIN
status_master
ON [100_orders_open].OEHISORD_DOC_NO = status_master.OESTATUS_DOC_NO;
您需要status_master(OESTATUS_DOC_NO)
上的索引。这应该会显着提升绩效。