Kontaktní osoba:
Ing. Jiří Pinkas
Mobil: +420 774 912 047

Troška na téma Optimalizace SQL dotazů


publikováno: 1.3.2016

Mám databázi, ve které jsou tyto tři tabulky:

  • artifacts_detail (140,000 záznamů)
  • java_classes (3,250,000 záznamů)
  • java_class_methods (26,500,000 záznamů)

a potřeboval jsem je spojit dohromady a získat prvních X záznamů, pak dalších X záznamů apod. Poznámka: Jedná se o databázi PostgreSQL. U ostatních to funguje podobně, jenom se malinko liší syntaxe.

Nejprve jsem udělal tento SELECT, ve kterém jsem pospojoval všechny tabulky a vybral například prvních 100 záznamů:

select *
from java_class_methods m 
  join java_classes c 
    on m.java_class_id = c.id 
  join artifacts_detail a 
    on c.group_id = a.group_id and c.artifact_id = a.artifact_id 
order by m.java_class_id, m.signature
limit 100;

Problém byl ten, že tento SELECT nikdy nedoběhl ... čekal jsem asi hodinu bez úspěchu. Podotýkám, že je vše správně "oindexované", čili v tom problém nebyl. Pro 10 záznamů to bylo rychlé, ale už pro 100 záznamů to bylo neuvěřitelně pomalé (a později jsem potřeboval těch záznamů získat daleko víc). Tak jsem to předělal následovně:

select *
from (select * 
      from java_class_methods m 
      join java_classes c 
        on m.java_class_id = c.id
      order by m.java_class_id, m.signature 
      limit 100) a 
join artifacts_detail b 
on a.group_id = b.group_id and a.artifact_id = b.artifact_id;

A tohle bylo hotové za pár desítek milisekund. Proč? Protože jsem co nejdříve výrazně omezil velikost výstupní matice a až v dalším kroku jsem k ní připojoval další tabulku.

 





comments powered by Disqus


Reference

Expobank CZ, a.s.

" Co se mi na školení líbilo byla neformální atmosféra, která panovala po celou dobu školení. Dále bych pochválil lektora za pohotové odpovědi a také za příklady ze života/ praxe (čím " podrobnosti ...

Tomáš

Commerz Systems

" Skoleni se mi moc libilo. Hodne praktickych prikladu na pocitaci, kde clovek rychlej pochopil danou problematiku. V pripade nepochopeni byl lektor ochoten poradit a vysvetlit konkretni pripad detailneji. Skoleni budu " podrobnosti ...

Andrea

Buřinka

" Školení na psaní SQL dotazů předčilo mé očekávání. Jirka probírá teorii po blocích, po každém bloku účastníci zpracovávají praktické příklady. Při zpracování praktických příkladů jsem velmi ocenila individuální " podrobnosti ...

Zuzana


Novinky

4.4.2017: SAP HANA & Veverka (SQuirrel SQL)

Oficiální SAP HANA studio funguje, ale je hrozně pomalé. Další z nástrojů, kde je možné rozchodit SAP HANA je Veverka (SQuirrel SQL) podrobnosti ...

25.3.2017: SAP HANA referenční příručky

V současnosti je trošku složitější najít na webu referenční příručku k SAP HANA SQL, proto sem dávám odkazy. podrobnosti ...

6.3.2017: SAP HANA 2.0, express edition + SAP HANA studio instalace

Rychlé how-to podrobnosti ...