Den här sql frågan tynger ner hela vår databas och jag är alltid tvungen att döda processen då någon kör frågan, vet inte hur jag ska optimera den?
select o.*,c.*,r.name,s.* from orders o inner join (users r,customer c, order_status s) on (r.user_id = o.user_id and o.customer_id = c.customer_id and s.status_id = o.status_id) and r.user_id = ? and c.forname like ?or c.aftername like ? ORDER BY created_at DESC
Tacksam för all hjälp ma kan få
EDIT**
dit när sql satsen körs kan den se ut så här:
select o.*,c.*,r.name,s.* from orders o inner join (users r,customer c, order_status s) on (r.user_id = o.user_id and o.customer_id = c.customer_id and s.status_id = o.status_id) and r.user_id = 697 and c.forname like '%Svensson%'or c.aftername like '%Svensson%' ORDER BY created_at DESC
verkar som att den går igenom hela dbn och sedan selectar det den behöver?
Det ser konstigt ut att du inte har någon WHERE utan låter JOIN ... ON sköta hela selekteringen. Behöver du samtliga kolumner från orders, customer och order_status?
Tyvärr så behöver jag de :( men då man kör en LIKE behöver man även då en WHERE? blir helt galen på den här sql satsen, det blir en lock på DBn när den körs
JOIN ... ON används ju bara för att tala om hur de olika tabellerna ska smältas samman, det ska inte användas för selektering. Då är det WHERE som gäller, eller HAVING i vissa fall.
Funkar det bättre när du lägger in WHERE för selekteringsdelen?
Hmm, fast ser inte hur jag ska kunna ha en WHERE i den sql satsen, sökningen som görs är baserat på kundnamn, dvs det är ett fritext fält som man skriver namnet i och sedan slås den upp mot databasen, och namnet skall vara like dvs jag vill ha alla som heter Andersson som resultet och därför har jag LIKE '%Andersson%' ska jag kanske istället ha WHERE namnet istället för LIKE namnet?
Läs vad jag har skrivit. WHERE ska inte ersätta LIKE.
Testa med
SELECT
o.*,
c.*,
r.name,
s.*
FROM
orders o
INNER JOIN (
users r,
customer c,
order_status s
)
ON (
r.user_id = o.user_id
AND
o.customer_id = c.customer_id
AND
s.status_id = o.status_id
)
WHERE
r.user_id = ?
AND
(c.forname like ? OR c.aftername like ?)
ORDER BY
created_at DESC
255 ms totalt · 4 externa anrop · v20260731065814-full.1dc6f849