我遇到了严重的麻烦,我有一个巨大的细微查询需要很长时间来执行。其实它冻结访问,有时我要杀死它的查询看起来像:在Access中选择优化
SELECT
ITEM.*,
ERA.*,
ORDR.*,
ITEM.COnTY1,
(SELECT TOP 1 New FROM MAPPING WHERE Old = ITEM.COnTY1) AS NewConTy1,
ITEM.COnValue1,
(SELECT TOP 1 KBETR FROM GEN_KUMV WHERE KNUMV = ERA.DOCCOND AND KSCHL = (SELECT TOP 1 New FROM MAPPING WHERE Old = ITEM.COnTY1)) AS NewCOnValue1
--... etc: this continues until ConTy40
FROM
GEN_ITEMS AS ITEM,
GEN_ORDERS AS ORDR,
GEN_ERASALES AS ERA
WHERE
ORDR.ORDER_NUM = ITEM.ORDER_NUM AND -- link between ITEM and ORDR
ERA.concat = ITEM.concat -- link between ERA and ITEM
我不会为你提供的表的模式,因为查询的作品,想什么,我知道的是,如果有一种方法使用另一种技术添加NewConTy1和NewConValue1以使其更有效。问题在于Con *字段从1到40,所以我必须将它们对齐(ConTy1旁边的NewConT1与New ConValue2旁边的NewConValue1直到40)。 ConTy#和ConTyValue#在ITEMS(每场) NewConty#和NewConValue#在ERA(每一个记录)
我真的希望我的解释是不够找出我的问题, 期待着你们
听见编辑:
忽略在选择TOP 1,这是因为数据的当前转储我是不准确的它会在稍后删除
编辑2:
另一件事我查询返回多达230场也笑
感谢 Miloud
问题是数据结构不好。解决这个问题(以及所需的解决方法)就会消失。 – 2010-12-08 20:39:52
@ David-W-Fenton也许你没有机会阅读评论? – Fionnuala 2010-12-08 22:44:14
有什么意见?我没有看到任何解决SQL中出现的非常糟糕的结构问题的东西。 – 2010-12-10 03:52:19