webForumDet fria alternativet
Logga in / Bli medlem

Optimering av sql

Databaser & SQL

2 svar · 304 visningar · startad av Skarre

Medlem sedan apr. 20012 427 inlägg
Trådstart#1

Jag ombads undersöka på en sql-fråga och varför den tar sådan tid att ställa, men jag är ju inte precis någon sql-guru så jag måste nog ta hjälp av expertisen här om det går bra.

Bara rent spontant, vad skulle kunna vara resurskrävande i denna fråga?

Jag vet t.ex. att "type" som förekommer i LIKE-sökningen nedan är semikolonseparerade listor i en enda kolumn. D.v.s "type" för en produktgrupp kan vara "avpassat;rullvara", och det känns ju som att kan vara ganska omfattande att söka flera gånger med LIKE som görs nedan.

Kan det vara LIKE-prylarna som är boven?

SELECT p.id productid, g.*, pics.id picid
FROM prd_products p
INNER JOIN prd_groups g ON p.prodgroupid = g.id
LEFT OUTER JOIN prd_products_pics pics ON p.id = pics.productid
WHERE g.grouptype = 'textile'
AND (
	LCASE(type) LIKE '%avpassat%'
	OR LCASE(type) LIKE '%platta%'
	OR LCASE(type) LIKE '%rullvara%'
)
GROUP BY g.id

Jag kan också nämna att när man väl kört en fråga så går den mycket snabbare när man kör den igen inom en viss tid. Väntar man en längre tid så blir det slött igen.

Medlem sedan dec. 200012 464 inlägg
#2

Kan det vara LIKE-prylarna som är boven?

Ja. Gör om datamodellen, använd en tabell till och lagra ett värde per rad.

Varför har du group by med i frågan?

Medlem sedan apr. 20012 427 inlägg
#3

LarsG skrev:

Ja. Gör om datamodellen, använd en tabell till och lagra ett värde per rad.

Det var det jag var rädd för. :(

LarsG skrev:

Varför har du group by med i frågan?

För att jag vill åt produktgrupper och inte enskilda produkter. :)

Tack för hjälpen!

252 ms totalt · 4 externa anrop · v20260731065814-full.c32e866c
122 ms — deklarationer (db)
0 ms — hämta statistik (cache)
127 ms — hämta tråd, inlägg och bilagor (db)
122 ms — ändringar (db)