Postgresql - optymalizacja zapytań

0

Witam czy ktoś mógłby w jakiś sposób przerobić te zapytania aby działały szybciej ??

select * from product p
join offer o on p.product_id=o.product_id
where p.attributes @> '{"Producent": "Sony"}'
order by name;
select * from product p
where p.price between 1000 and 2000 or p.attributes ? 'trwałośc' and
p.name like '%klimatyzator%';
select name, count(1)
from product
join offer on product.product_id=offer.product_id
where offer.price>40 or product.name='Klimatyzacja'
group by name
having count(1)>1;
select product_id, name, description, price
from product
where name='cos' and price>20.00
order by price desc;
select name, count(1)
from product
group by name
having count(1)>1;
0

Chodzi o to żeby plan wykonania zapytania zawierał jak najmniejszą liczbę operacji i był naj najszybszy.

1
  1. atributes to tablica, czy JSON? jeśli tablica, to nic nie zrobisz. JSONa mozesz zaindeksować
  2. nie mieszaj AND i OR, staraj sie pozbyc like
  3. tu chyba nic nie zdzialasz oprocz indeksow (ale to wszedzie). Podobnie w 4 i 5

Widze, ze na pewno musisz miec indeks product(name)

0

Jak używasz like to w miarę możliwości unikaj leading wildcard, czyli zamiast '%foo%', zrób 'foo%'.

http://use-the-index-luke.com/sql/where-clause/searching-for-ranges/like-performance-tuning

0

Tak to JSON a jesli chodzi o indeksy to pozakladalem natomiast mam problem z GroupBy i HAVING ktos wie co w takim przypadku zrobic bo indeksy srednio dzialaja. Na JSON-a zrobilem indeks: create index indeks_zad_2_attributes on product using gin(attributes);

0

Warunek z HAVING, o ile wiem, jest już zakładany na wyciągnięte rekordy, więc indeks nie bardzo wydaje się być tu pomocny

1 użytkowników online, w tym zalogowanych: 0, gości: 1