Just nu i M3-nätverket
Jump to content

Kan det optimeras mer?


Cluster

Recommended Posts

Har försökt optimera en statitikutläsning (antal sålda produkter en viss månad) från en accessfil

//eforum.idg.se/viewmsg.asp?EntriesId=732158

 

Har nu lyckats få koden mycket snabbare så nu undrar jag om något SQL-ess känner för att se om denna fråga går att göra bättre/smartare:

SELECT SUM((sumAntLev*sumProdAnt)) FROM (SELECT DISTINCTROW ordrar.antLev AS [sumAntLev], Sum(orderrader.prodAnt) AS [sumProdAnt]
FROM produkter INNER JOIN (ordrar INNER JOIN orderrader ON ordrar.ID = orderrader.orderId)
ON produkter.id = orderrader.prodId
GROUP BY ordrar.antLev, Month([betald]), Year([betald]), ordrar.ID, produkter.id, produkter.kat
HAVING (((Month([betald]))=7) AND ((Year([betald]))=2005) AND ((produkter.kat)<5)))

 

 

/Cluster

------------------------------------------------------------

Ditt vetande är värdelöst om inte andra vet att du vet

-----------> http://eforum.kicks-ass.net <------------

 

[inlägget ändrat 2005-07-25 20:21:41 av Cluster]

Link to comment
Share on other sites

Mr Andersson

Min erfarenhet är att det går snabbare att göra JOIN utan att göra det som subfråga. Så här hade jag gjort det (med reservation att jag inte kan testa koden så att den gör detsamma som din...):

 

SELECT SUM((sumAntLev*sumProdAnt)) FROM (SELECT DISTINCTROW ordrar.antLev AS [sumAntLev], Sum(orderrader.prodAnt) AS [sumProdAnt] FROM produkter

INNER JOIN orderrader ON produkter.id = orderrader.prodId

INNER JOIN ordrar ON ordrar.ID = orderrader.orderId)

GROUP BY ordrar.antLev, Month([betald]), Year([betald]), ordrar.ID, produkter.id, produkter.kat

HAVING (((Month([betald]))=7) AND ((Year([betald]))=2005) AND ((produkter.kat)<5)))

 

 

Link to comment
Share on other sites

Hmmm...

SELECT SUM(sumAntLev*sumProdAnt) FROM ( 
SELECT DISTINCTROW ordrar.antLev AS sumAntLev, Sum(orderrader.prodAnt) AS sumProdAnt 
FROM produkter INNER JOIN orderrader ON produkter.id = orderrader.prodId 
INNER JOIN ordrar ON ordrar.ID = orderrader.orderId) 
GROUP BY ordrar.antLev, Month(betald), Year(betald), ordrar.ID, produkter.id, produkter.kat 
HAVING (Month(betald)=7 AND Year(betald)=2005) AND produkter.kat<5)

ger:

Microsoft JET Database Engine error '80040e14'

 

Extra ) in query expression '(Month(betald)=7 AND Year(betald)=2005) AND produkter.kat<5)'.

Får kolla på det imorrn.

 

 

/Cluster

------------------------------------------------------------

Ditt vetande är värdelöst om inte andra vet att du vet

-----------> http://eforum.kicks-ass.net <------------

 

[inlägget ändrat 2005-07-25 23:20:48 av Cluster]

Link to comment
Share on other sites

Nope, det ger:

Microsoft JET Database Engine error '80040e14'

 

Syntax error (missing operator) in query expression 'produkter.id = orderrader.prodId INNER JOIN ordrar ON ordrar.ID = orderrader.orderId'.

Har stirrat mig blind på detta och nu spelar det längre ingen roll hur jag ändrar, tycker det ser lika dant ut ändå... :)

Kanske är det så att access helt enkelt inte klarar av det?

 

 

/Cluster

------------------------------------------------------------

Ditt vetande är värdelöst om inte andra vet att du vet

-----------> http://eforum.kicks-ass.net <------------

 

[inlägget ändrat 2005-07-26 07:48:28 av Cluster]

Link to comment
Share on other sites

Archived

This topic is now archived and is closed to further replies.



×
×
  • Create New...