I’ve got a simple query (postgresql if that matters) that retrieves all items for some_user excluding the ones she has on her wishlist:
select i.*
from core_item i
left outer join core_item_in_basket b on (i.id=b.item_id and b.user_id=__some_user__)
where b.on_wishlist is null;
The above query runs in ~50000ms (yep, the number is correct).
If I remove the “b.on_wishlist is null” condition or make it “b.on_wishlist is not null”, the query runs in some 50ms (quite a change).
The query has more joins and conditions but this is irrelevant as only this one slows it down.
Some info on the database size:
- core_items has ~ 10.000 records
- core_user has ~5.000 records
- core_item_in_basket has ~2.000
- records (of which some 50% has
on_wishlist = true, the rest is null)
I don’t have any indexes (except for ids and foreign keys) on those two tables.
The question is: what should I do to make this run faster? I’ve got a few ideas myself to check out this evening, but I’d like you guys to help if possible, as well.
Thanks!
Sorry for adding 2nd answer, but stackoverflow doesn’t let me format comments properly, and since formatting is essential, I have to post answer.
Couple of options:
Let us know the results 🙂