INDEXY JSOU GRUNT. Pavel Stěhule

Podobné dokumenty
Čteme EXPLAIN. CSPUG, Praha. Tomáš Vondra Czech and Slovak PostgreSQL Users Group

PostgreSQL. Podpora dědičnosti Rozšiřitelnost vlastní datové typy. Univerzální nasazení ve vědecké sféře

TimescaleDB. Pavel Stěhule 2018

zobrazení délky ve výpisu v psql

Paralelní dotazy v PostgreSQL 9.6 (a 10.0)

Administrace, Monitoring. Pavel Stěhule P2D2, Praha 2016

Novinky v PostgreSQL 9.4. Tomáš Vondra, 2ndQuadrant

PG 9.5 novinky ve vývoji aplikací

IDS optimalizátor. Ing. Jan Musil, IBM ČR Community of Practice for

Optimalizace dotazů a databázové transakce v Oracle

PostgreSQL návrh a implementace náročných databázových aplikací

PostgreSQL Novinky (a JSONB) Tomáš Vondra, GoodData (tomas.vondra@gooddata.com) (tomas@pgaddict.

B0M33BDT Technologie pro velká data. Supercvičení SQL, Python, Linux

Návrh a prototypová implementace databáze pro

Full-textové vyhledávání. Július Štroffek Revenue Product Engineer Sun Microsystems

PostgreSQL 8.3. požadavky na odezvu atd. Zatím nedostižnou metou je implementace celého standardu ANSI

Tabulka fotbalové ligy

InnoDB transakce, cizí klíče, neumí fulltext (a nebo už ano?) CSV v textovém souboru ve formátu hodnot oddělených čárkou

Obchodní akademie a Jazyková škola s právem státní jazykové zkoušky Jihlava

SQL SQL-SELECT. Informační a znalostní systémy. Informační a znalostní systémy SQL- SELECT

SQL injection princip a ochrana

Databázové systémy. Cvičení 6: SQL

Relační DB struktury sloužící k optimalizaci dotazů - indexy, clustery, indexem organizované tabulky

SQL v14. 4D Developer konference. 4D Developer conference 2015 Prague, CZ Celebrating 30 years

MySQL. mysql> CREATE DATABASE nova CHARACTER SET latin2 COLLATE latin2_czech_cs; Query OK, 1 row affected (0.02 sec)

Univerzita Palackého v Olomouci Radek Janoštík (Univerzita Palackého v Olomouci) Základy programování 4 - C# 10.4.

Monitoring výkonu PostgreSQL

Úvod do databázových systémů

Fyzické uložení dat a indexy

Návrh a tvorba WWW stránek 1/14. PHP a databáze

Databázové systémy. Agregace, sumarizace, vnořené dotazy. Vilém Vychodil

8.2 Používání a tvorba databází

Databáze SQL SELECT. David Hoksza

Implementace funkce XMLTABLE v PostgreSQL. Pavel

FAKULTA STAVEBNÍ STUDIJNÍ PROGRAM: GEODÉZIE A KARTOGRAFIE TYP PROGRAMU: MAGISTERSKÝ STUDIJNÍ OBOR: GEOMATIKA ÚVOD DO ZPRACOVÁNÍ PROSTOROVÝCH DAT

Databázové systémy I

Jaký je rozdíl v definicicíh VARCHAR2(20 BYTE) a VARCHAR2(20 CHAR):

Databáze. Velmi stručný a zjednodušený úvod do problematiky databází pro programátory v Pythonu. Bedřich Košata

Databázové systémy II. KIV/DB2 LS 2007/2008. Zadání semestrální práce

Jak ušetřit místo a zároveň mít data snadno dostupná. David Turoň

Úvod do SQL v systému SAS Martin Branda

Databázové systémy Cvičení 5.2

Databáze 2011/2012 SQL DDL (CREATE/ALTER/DROP TABLE), DML (INSERT/UPDATE/DELETE) RNDr.David Hoksza, Ph.D.

Optimalizace SQL dotazů

Kurz Databáze. Obsah. Dotazy. Zpracování dat. Doc. Ing. Radim Farana, CSc.

cstore_fdw column store pro PostgreSQL Prague PostgreSQL Developer Day 2015 Jan Holčapek

Databáze I. 1. přednáška. Helena Palovská

Úvod do databází. Modelování v řízení. Ing. Petr Kalčev

Jazyk SQL databáze SQLite. připravil ing. petr polách

Použití databází na Webu

Verzování a publikace dat na webu za pomoci PostgreSQL

Architektury databázových

Výkonnostní archeologie

KIV/ZIS cvičení 5. Tomáš Potužák

Úvod do databázových systémů

6. blok část B Vnořené dotazy

Databázové systémy Cvičení 5

8. Zpracování dotazu. J. Zendulka: Databázové systémy 8 Zpracování dotazu 1

J. Zendulka: Databázové systémy 8 Zpracování dotazu Podstata optimalizace zpracování dotazu

Úvod do databázových systémů

Databázové systémy a SQL

MySQL sežere vaše data

Jazyk SQL 1. Michal Valenta. Katedra softwarového inženýrství FIT České vysoké učení technické v Praze c Michal Valenta, 2012 BI-DBS, ZS 2011/12

Multi-dimensional expressions

Úvod do databázových systémů

KIV/ZIS - SELECT, opakování

Databáze I. Přednáška 4

Práce s datumem a časem v PostgreSQL. Pavel Stěhule P2D2 2019

První pomoc pro DBA. administrátory CIDUG. Milan Rafaj IBM Česká republika

D O K U M E N T A C E

WWW dotazovací služby pro prostorová data URM. Jiří Čtyroký Útvar rozvoje hl. m. Prahy

RNDr. Michal Kopecký, Ph.D. Department of Software Engineering, Faculty of Mathematics and Physics, Charles University in Prague

2. blok část B Základní syntaxe příkazů SELECT, INSERT, UPDATE, DELETE

Novinky v Microsoft SQL Serveru RNDr. David Gešvindr MVP: Data Platform MCSE: Data Platform MCSD: Windows Store MCT

Inovace a zkvalitnění výuky prostřednictvím ICT Databázové systémy MySQL základní pojmy, motivace Ing. Kotásek Jaroslav

Optimalizace. Ing. Marek Sušický, RNDr. Ondřej Zýka

Použití PostgreSQL v. P2D Martin Swiech

Informační systémy ve zdravotnictví. 6. cvičení

SII - Informatika. 1. Atribut relace, jehož hodnota jednoznačně určuje prvek v jiné relaci, se nazývá:

Základní přehled SQL příkazů

O Apache Derby detailněji. Hynek Mlnařík

Základy informatiky. 08 Databázové systémy. Daniela Szturcová

PostgreSQL jako platforma pro datové sklady

POSTUP PRO VYTVOŘENÍ STRUKTUR PRO UKLÁDÁNÍ RDF DAT V ORACLE

Roman Dušek

Informační systémy ve zdravotnictví. 10. cvičení

DB1 cvičení 4 spojení tabulek a složitější dotazy

Informační systémy 2008/2009. Radim Farana. Obsah. Jazyk SQL

Databázové systémy. Doc.Ing.Miloš Koch,CSc.

Vyhledávání podle klíčových slov v relačních databázích. Dotazovací jazyky I ZS 2010/11 Karel Poledna

KIV/ZIS cvičení 6. Tomáš Potužák

Inovace a zkvalitnění výuky prostřednictvím ICT. Základní seznámení s MySQL Ing. Kotásek Jaroslav

Databázové systémy Cvičení 5.3

VYSOKÁ ŠKOLA BÁŇSKÁ TECHNICKÁ UNIVERZITA OSTRAVA HORNICKO GEOLOGICKÁ FAKULTA INSTITUT GEOINFORMATIKY. Prostorové databáze

Michal Krátký, Miroslav Beneš

Vzorové příklady SQL. Tabulka: Kniha CREATE TABLE kniha (id INTEGER, název VARCHAR(50), PRIMARY KEY (id))

Databázové a informační systémy

Sada 1 - PHP. 14. Úvod do jazyka SQL

Enterprise funkce SQL Serveru 2016, které jsou od SP1 zdarma

Databázové systémy. - SQL * definice dat * aktualizace * pohledy. Tomáš Skopal

Transkript:

INDEXY JSOU GRUNT Pavel Stěhule

Indexy bez indexu čteme vše a zahazujeme nechtěné s indexem čteme pouze to co nás zajímá POZOR - indexy vedou k random IO, navíc se čtou dvě databázové relace (index a heap) POZOR - z disku se čtou vždy kompletní datové stránky - nikoliv řádky bez indexu musíme relaci seřadit (pokud je to vyžadováno), což může vést k pomalému řazené s využitím IO (external sort)

Definice databázová relace obsahující uspořádanou množinu dvojic (klíč, pozice) pozitivní (v 99%) vliv na čtení z db, negativní vliv na zápis v PostgreSQL index neobsahuje informace o viditelnosti záznamu (o jeho existenci) - DELETE, VACUUM nemodifikují indexy

Optimizer Filter RANDOM_PAGE_COST = 4 SEQ_PAGE_COST = 1 EFFECTIVE_CACHE_SIZE postgres=# EXPLAIN SELECT * FROM foo WHERE a = 10; QUERY PLAN --------------------------------------------------------------------------- Index Only Scan using foo_a_idx on foo (cost=0.00..19.24 rows=1 width=4) Index Cond: (a = 10) (2 rows)

Vztah haldy a indexu 16KB Pavel Stěhule Zdeněk Stěhule Pavel Stěhule, Zdeněk Stěhule 8KB INDEX ONLY SCAN

Vztah haldy a indexu žádný halda je organizovaná podle indexu jednorázově - PostgreSQL příkaz CLUSTER) průběžne - cluster table (tabulka je organizovaná podle primárního klíče - MSSQL, InnoDB)

Optimizer Order by WORK_MEM postgres=# EXPLAIN SELECT * FROM foo ORDER BY a; QUERY PLAN ------------------------------------------------------------------------------------- Index Only Scan using foo_a_idx on foo (cost=0.00..303949.99 rows=9999985 width=4) (1 row) postgres=# SET work_mem = '500MB'; SET postgres=# EXPLAIN SELECT * FROM foo ORDER BY a; QUERY PLAN -------------------------------------------------------------------- Sort (cost=1306920.83..1331920.79 rows=9999985 width=4) Sort Key: a -> Seq Scan on foo (cost=0.00..144247.85 rows=9999985 width=4) (3 rows)

Využití WHERE (index scan, index only scan) JOIN (merge join) ORDER BY GROUP BY DISTINCT

Konkurence Clustered table/index (částečně příkaz CLUSER) Coverage indexes (téměř index only scan)

Možné variace indexu Podmíněný index Funkcionální index Jednoduchý index Složený index Multidimenzionální index Fulltextový index

Podporované formáty Btree - Balanced Tree GiST - Generalized Search Tree GIN - Generalized Inverted Indexes sdílené klíče, Btree

Podmíněný index omezuje velikost relace CREATE TABLE message( id serial PRIMATY KEY, "to" text, inserted timestamp, subject text, read boolean); CREATE INDEX ON message("to", id DESC) WHERE read; SELECT * FROM message WHERE read ORDER BY id DESC;

Funkcionální index zabraňuje opakovanému volání funkce CREATE TABLE message( id serial PRIMATY KEY, "to" text, inserted timestamp, subject text, read boolean); CREATE INDEX ON message((lower("to"))) SELECT * FROM message WHERE lower("to") = lower('pavel.stehule@gmail.com');

Složený index zvyšuje selektivitu indexu CREATE TABLE message( id serial PRIMATY KEY, "to" text, inserted timestamp, subject text, read boolean); CREATE INDEX ON message("to", inserted) SELECT * FROM message WHERE "to" = 'Pavel.stehule@gmail.com' AND inserted BETWEEN current_date - 30 AND current_date;

Fulltextový index umožňuje hledat slova CREATE TABLE message( id serial PRIMATY KEY, "to" text, inserted timestamp, subject text, read boolean); CREATE INDEX ON message (to_tsvector('simple', subject)); postgres=# SELECT * FROM message WHERE to_tsvector('simple', subject) @@ to_tsquery('žluté'); subject ----------------------------------- žluťoučký kůň se napil žluté vody (1 row)

Speciální indexy Indexy typu GiST, GIN, SP-GiST V PostgreSQL ve spojení se zákaznickými typy postgres=# explain analyze select * from obce where nazposty like '%Benešov%'; QUERY PLAN --------------------------------------------------------------------------------------------------- Seq Scan on obce (cost=0.00..335.05 rows=61 width=29) (actual time=0.023..2.978 rows=96 loops=1) Filter: (nazposty ~~ '%Benešov%'::text) Rows Removed by Filter: 16548 Total runtime: 3.004 ms (4 rows) postgres=# explain analyze select * from obce where nazposty ilike '%Benešov%'; QUERY PLAN ---------------------------------------------------------------------------------------------------- Seq Scan on obce (cost=0.00..335.05 rows=61 width=29) (actual time=0.091..21.541 rows=96 loops=1) Filter: (nazposty ~~* '%Benešov%'::text) Rows Removed by Filter: 16548 Total runtime: 21.577 ms (4 rows)

Extenze trigramy postgres=# CREATE EXTENSION pg_trgm; CREATE EXTENSION postgres=# CREATE INDEX ON obce USING gin (nazposty gin_trgm_ops); CREATE INDEX postgres=# EXPLAIN ANALYZE SELECT * FROM obce WHERE nazposty ILIKE '%Benešov%'; QUERY PLAN ------------------------------------------------------------------------------------------ Bitmap Heap Scan on obce (cost=44.47..151.12 rows=61 width=29) Recheck Cond: (nazposty ~~* '%Benešov%'::text) -> Bitmap Index Scan on obce_nazposty_idx (cost=0.00..44.46 rows=61 width=0) Index Cond: (nazposty ~~* '%Benešov%'::text) Total runtime: 0.396 ms

KNN search dohledání nejbližšího bodu Operátor <-> pro výpočet vzdálenosti postgres=# SELECT DISTINCT nazposty, nazposty <-> 'Benešov' FROM obce ORDER BY nazposty <-> 'Benešov' LIMITt 5; nazposty?column? --------------------+---------- Dolní Benešov 0.428571 Horní Benešov 0.428571 Benešov u Semil 0.5 Benešov u Prahy 0.5 Benešov u Boskovic 0.555556 (5 rows) postgres=# explain SELECT nazobce, nazobce <-> 'Benešov' dif FROM obce ORDER BY nazobce <-> 'Benešov' LIMIT 100; QUERY PLAN ------------------------------------------------------------------------------------------- Limit (cost=0.00..8.61 rows=100 width=10) -> Index Scan using obce_nazobce_idx on obce (cost=0.00..1433.14 rows=16644 width=10) Order By: (nazobce <-> 'Benešov'::text) (3 rows)