Cvičení 9

Témata

Plánování

Všechny zde uvedené informace jsou specifické pro PostgreSQL. U jiných databázových systémů to může fungovat jinak - jsou to záležitosti fyzické vrstvy / implementace systému.

Na přednášce jste již viděli část databáze imdb. Vyzkoušíme si na ní, co vše se můžeme dozvědět o vykonávání námi napsaného dotazu.

Nejprve potřebné zdroje :

Indexy

Indexes are a common way to enhance database performance. An index allows the database server to find and retrieve specific rows much faster than it could do without an index. But indexes also add overhead to the database system as a whole, so they should be used sensibly. (Dokumentace PostgreSQL)

Stojí za to pročíst

Úkoly

  1. (Vyžaduje nejprve zásah na mé straně - tj dát uživatelům DB práva ke čtení souborů z disku a nakopírování požadovaných souborů na server. Provedu, až pojede server. Soubory budou v /tmp/imdb.) Seznamte se se strukturou (omezené) databáze imdb z přednášky, přičemž postupujte následovně:
  1. Vyzkoušejte si různé formy příkazu EXPLAIN na různých dotazech nad databázemi imdb a zaměstnanců (tam máte spoustu dotazů z minulých hodin).
    • Začněte něčím jednoduchým - SELECT z jedné tabulky s WHERE kaluzulí (zkuste klauzule, které splní mnoho n-tic, i klauzule, které jich splní jen velmi málo).
    • Poté zkuste nějaký složitější dotaz, který například spojuje data z více tabulek s různými restrikcemi, projekcemi, agregacemi atd.
  2. Zkuste i verze příkazu EXPLAIN s ANALYZE, VERBOSE, …
  3. K dispozici máte data o zaměstancích v původní verzi a ve verzi bez indexů. Naimportujte si je do databáze (ideálně každou do jiného schématu; u verze bez indexu je to nachystáno) a porovnejte vykonávání různých dotazů.
  4. V neindexované verzi databáze z předchozího příkladu vytvořte ručně indexy, které vykonávání vašich dotázů co nejvíce zefektivní.
  5. (Může být náročnější a vyžadovat dost samostudia. Je to ale velmi praktická znalost.) Najděte si online nějakou jinou (doporučuji menší) databázi a zkuste si ji naimportovat do postgresu. Bývají dostupné přímo databáze vytvořené příkazem pg_dump, tam je import velmi snadný. Jsou ale i různé jiné formáty, ze kterých můžete chtít data do databáze dostat. Např. imdb je dostupná v csv souborech a data vyžadují dost číštění (při rozumných integritních omezeních).