Indeksowanie w bazach danych

Podobne dokumenty
Optymalizacja poleceń SQL Metody dostępu do danych

Język SQL, zajęcia nr 1

77. Modelowanie bazy danych rodzaje połączeń relacyjnych, pojęcie klucza obcego.

Wprowadzenie do baz danych

Język SQL. Rozdział 2. Proste zapytania

Wykład 5. SQL praca z tabelami 2

Wstęp 5 Rozdział 1. Podstawy relacyjnych baz danych 9

Relacyjne bazy danych. Podstawy SQL

Autor: Joanna Karwowska

Integralność danych Wersje języka SQL Klauzula SELECT i JOIN

Wybór wszystkich danych: SELECT * FROM employee Wybór określonych kolumn lub wyrażeń: SELECT first_name, last_name, salary FROM employee

Relacyjne bazy danych. Podstawy SQL

Zasady transformacji modelu DOZ do projektu tabel bazy danych

Modelowanie hierarchicznych struktur w relacyjnych bazach danych

Tabela wewnętrzna - definicja

Wykład XII. optymalizacja w relacyjnych bazach danych

Systemy GIS Tworzenie zapytań w bazach danych

- język zapytań służący do zapisywania wyrażeń relacji, modyfikacji relacji, tworzenia relacji

Plan wykładu. Klucz wyszukiwania. Pojęcie indeksu BAZY DANYCH. Pojęcie indeksu - rodzaje indeksów Metody implementacji indeksów.

Aby uruchomić program klienta i połączyć się z serwerem, należy komendę:

Internetowe bazy danych

opisuje nazwy kolumn, wyrażenia arytmetyczne, funkcje nazwy tabel lub widoków warunek (wybieranie wierszy)

Intro. I.Wojnicki, ZTB:XML ZTB: XML. Igor Wojnicki. Katedra Informatyki Stosowanej, Akademia Górniczo-Hutnicza w Krakowie.

Programowanie w SQL procedury i funkcje. UWAGA: Proszę nie zapominać o prefiksowaniu nazw obiektów ciągiem [OLIMP\{nr indeksu}] Funkcje użytkownika

SIECI KOMPUTEROWE I BAZY DANYCH

PRZESTRZENNE BAZY DANYCH WYKŁAD 2

Wprowadzenie do języka SQL

Języki programowania wysokiego poziomu. PHP cz.4. Bazy danych

Przestrzenne bazy danych Podstawy języka SQL

Autor: Joanna Karwowska

Bazy danych Ćwiczenia projektowe

SQL, LIKE, IN, CASE, EXISTS. Marcin Orchel

Bazy danych. Polecenia SQL

Ref. 7 - Język SQL - polecenia DDL i DML

Język SQL. instrukcja laboratoryjna. Politechnika Śląska Instytut Informatyki. laboratorium Bazy Danych

Odnawialne Źródła Energii I rok. Tutorial PostgreSQL

Bazy danych 2. Wykład 3. Metodologia projektowania baz danych (projektowanie fizyczne)

Podstawy języka SQL. SQL Structured Query Languagestrukturalny

Wykład 05 Bazy danych

Kurs. Podstawy MySQL

Język SQL. Rozdział 10. Perspektywy Stosowanie perspektyw, tworzenie perspektyw prostych i złożonych, perspektywy modyfikowalne i niemodyfikowalne.

P o d s t a w y j ę z y k a S Q L

Tworzenie aplikacji bazodanowych w delphi dla dużych baz danych FRAMEWORK IMPET

1: 2: 3: 4: 5: 6: 7: 8: 9: 10:

Wykład 3 Składnia języka C# (cz. 2)

Technologie baz danych

SQL - Structured Query Language -strukturalny język zapytań SQL SQL SQL SQL

Bazy danych 11. Algorytmy złaczeń. P. F. Góra

BAZY DANYCH wprowadzenie do języka SQL. Opracował: dr inż. Piotr Suchomski

Bazy danych 6. Klucze obce. P. F. Góra

Fizyczna struktura bazy danych w SQL Serwerze

Wykład 8. SQL praca z tabelami 5

Ogólny plan przedmiotu. Strony WWW. Literatura BAZY DANYCH. Materiały do wykładu:

SELECT * FROM tabela WHERE warunek wybiera dane spełniające podany warunek

Statystyki (1) Optymalizacja poleceń SQL Część 2. Statystyki (2) Statystyki (3) Informacje, opisujące dane i struktury obiektów bazy danych.

Bazy danych 7. SQL podstawy

Alicja Marszałek Różne rodzaje baz danych

Autor: Joanna Karwowska

SQL (ang. Structured Query Language)

Podstawy języka SQL Co to jest SQL? Możliwości SQL SQL*Plus

Wprowadzenie do BD Operacje na bazie i tabelach Co poza zapytaniami? Algebra relacji. Bazy Danych i Systemy informacyjne Wykład 2.

Wykład 4. SQL praca z tabelami 1

Autor: Joanna Karwowska

1. Tworzenie tabeli. 2. Umieszczanie danych w tabeli

Język SQL. Rozdział 5. Połączenia i operatory zbiorowe

Podstawowe zapytania SELECT (na jednej tabeli)

Optymalizacja poleceń SQL Indeksy

Język SQL Złączenia. Laboratorium. Akademia Morska w Gdyni

CREATE DATABASE ksiegarnia_internetowa DEFAULT CHARACTER SET utf8 COLLATE utf8_unicode_ci;

< K (2) = ( Adams, John ), P (2) = adres bloku 2 > < K (1) = ( Aaron, Ed ), P (1) = adres bloku 1 >

Widok Connections po utworzeniu połączenia. Obszar roboczy

Podstawy języka SQL. standardy SQL formułowanie zapytań operacje na strukturach danych manipulowanie danymi. Bazy danych s.5-1

Oracle PL/SQL. Paweł Rajba.

Język SQL. Rozdział 9. Język definiowania danych DDL, część 2.

Przydatne sztuczki - sql. Na przykładzie postgres a.

INDEKSY. Biologiczne Aplikacje Baz Danych. dr inż. Anna Leśniewska

sprowadza się od razu kilka stron!

Wykład 6. SQL praca z tabelami 3

PODSTAWY BAZ DANYCH. 10. Partycjonowanie tabel i indeksów. 2009/ Notatki do wykładu "Podstawy baz danych"

060 SQL FIZYCZNA STRUKTURA BAZY DANYCH. Prof. dr hab. Marek Wisła

Instytut Mechaniki i Inżynierii Obliczeniowej Wydział Mechaniczny Technologiczny Politechnika Śląska

KOLEKCJE - to typy masowe,zawierające pewną liczbę jednorodnych elementów

SQL do zaawansowanych analiz danych część 1.

Wprowadzenie do projektowania i wykorzystania baz danych Relacje

1. Sprawdzenie ustawień konfiguracyjnych. Uruchomienie wiersza poleceń:..\ścieżka\bin>mysqladmin variables

Struktura drzewa w MySQL. Michał Tyszczenko

Perspektywy Stosowanie perspektyw, tworzenie perspektyw prostych i złożonych, perspektywy modyfikowalne i niemodyfikowalne, perspektywy wbudowane.

Laboratorium nr 8. Temat: Podstawy języka zapytań SQL (część 2)

Optymalizacja w relacyjnych bazach danych - wybór wydajnej strategii obliczania wyrażenia relacyjnego.

SQL. Æwiczenia praktyczne

Bazy danych 12. SQL Wyszukiwanie pełnotekstowe

Oracle PL/SQL. Paweł Rajba.

QUERY język zapytań do tworzenia raportów w AS/400

Bazy danych. dr Radosław Matusik. radmat

Stosowanie indeksów ma swoje korzyści, ale bywa również kosztowne.

Oracle11g: Wprowadzenie do SQL

Optymalizacja poleceń SQL

Marek Rakowski Podstawy zdania SELECT Strona 1 z 12

Transkrypt:

w bazach Katedra Informatyki Stosowanej AGH 5grudnia2013

Outline 1 2 3 4

Czym jest indeks? Indeks to struktura, która ma przyspieszyć wyszukiwanie. Indeks definiowany jest dla atrybutów, które nazywamy kluczami indeksu lub kluczami wyszukiwania. s^irb j^q`efkd ob`loap

gęste i rzadkie Indeks gęsty to taki, który posiada wpis dla każdej wartości klucza wyszukiwania. Indeks rzadki posiada wpisy tylko dla niektórych wartości. +*,* -*.* /* 0* 1* 2* 3* +** ++* ÍÍÎ Í +,* Gkabu cfib /. 0. -*.* /* 0* 1* 2* 3* +** B^q^ cfib +* -* /* 1* w 3* ++* Ä'% +-* ç'+ +/* s +1* s ' +3* s,+* s',-* s /. 0. -*.* /* 0* 1* 2* 3* +**

Przykład Mamy tabelę: CREATE TABLE test1 ( id integer, content varchar ); Załóżmy że aplikacja wykonuje wiele zapytań typu: SELECT content FROM test1 WHERE id = constant; Silnik bazodanowy za każdym razem musiałby przejrzeć wszystkie rekordy. Indeks pozwala na przyspieszenie operacji: CREATE INDEX test1_id_index ON test1 (id);

Typy indeksów w PostgreSQL PostgreSQL 9.3 wspiera następujące typy indeksów: B-drzewa (B-tree), zhaszowaniem(hash), GiST, SP-GiST, GIN.

oparte o B-drzewa oparte o B-drzewa mogą być stosowane dla dziedzin dla których określono relację porządkującą. Mogą więc zostać użyte jeżeli wartość klucza wyszukiwania porównywana jest przy pomocy następujących operatorów: < <= = >= > Zastosowanie mają też operatory BETWEEN oraz IN a także funkcje sprawdzające NULL.

oparte o B-drzewa, c.d. Porównania wykorzystujące dopasowanie wzorców mogą korzystać z indeksów opartych o B-drzewa tylko jeżeli wzorzec jest stałą i jest zaczepiony na początku ciągu znaków: col LIKE foo%, col ~ ˆfoo. Porównania nie rozróżniające wielkości liter (ILIKE, ~*) użyją indeksu, jeżeli wzorzec rozpoczyna się od znaków innych niż litery.

oparte o haszowanie oparte o haszowanie mogą być wykorzystywane tylko w przypadku porównywania wartości (operator =). Utworzenie indeksu z haszowaniem: CREATE INDEX name ON table USING hash (column);

GiST GiST (ang. Generalized Search Trees) to infrastruktura, w ramach której mogą być implementowane różne strategie indeksowania dla różnych. Przykładowo, standardowo dostępne są indeksy dla dwuwymiarowych, wspierające zapytania z następującymi operatorami: <<, >> &<, &> <<, >> &<, &> @>, <@ ~= && SELECT * FROM places ORDER BY location <-> point (101,456) LIMIT 10;

GIN odwrotne, które pozwalają na obsługę wartości zawierających więcej niż jeden klucz (nieatomicznych), takich jak tablice (arrays). GIN, podobnie jak GiST, może korzystać z różnych strategii indeksowania i operatorów. Przykładowo, standardowo dostępne są operatory dla tablic: <@ @> = &&

przykład Weźmy tabelę: CREATE TABLE test2 ( major int, minor int, name varchar ); Założmy, że często wykonywane są zapytania typu: SELECT name FROM test2 WHERE major = constant AND minor = constant; Możemy skorzystać z indeksu go: CREATE INDEX test2_mm_idx ON test2 (major, minor);

oparte o B-drzewa są wspierane dla B-drzew, GiST oraz GIN i mogą zawierać do 32 kolumn. Indeks oparty o B-drzewa, którego klucz wyszukiwania zawiera kilka kolumn może być stosowany dla dowolnego podzbioru tych kolumn, ale najbardziej wydajny będzie dla kolumn wiodących: Części indeksu do przejrzenia zostaną wybrane na podstawie ograniczeń równości na kolumnach wiodących oraz ograniczeń nierówności na pierwszej kolumnie która nie posiada ograniczenia równości.

oparte o GiST i GIN Wielokolumnowy indeks GiST również może być użyty z warunkami obejmującymi podzbiór jego klucza wyszukiwania. Warunek dotyczący pierwszej kolumny ma największy wpływ na wybór obszaru indeksu do przejrzenia. Indeks GiST będzie mało wydajny, jeżeli pierwsza kolumna zawiera niewiele różnych wartości. Wielokolumnowy indeks GIN także obsługuje warunki dotyczące podzbioru klucza wyszukiwania, przy czym tu wybór podzbioru nie ma wpływu na wydajność.

Łączenie indeksów Indeks wielokolumnowy może być wykorzystany, jeżeli ograniczenia nałożone na jego kolumny powiązane są operatorem AND. PostgreSQL ma jednak możliwość łączenia w jednym zapytaniu kilku indeksów, a w szczególności wykorzystania jednego indeksu dla kilku różnych wartości. Przy skanowaniu poszczególnych indeksów budowane są w pamięci bitmapy określające pasujące rekordy. Bitmapy te są następnie łączone zgodnie z zapytaniem, tzn. AND lub OR. Decyzja, czy korzystać z indeksów prostych czy złożonych, musi być oparta o analizę spodziewanego wykorzystania bazy.

Indeks może być w stanie dostarczać wyniki (wiersze spełniające warunek) w określonym porządku. Wtedy klauzula ORDER BY operacji nie wymaga dodatkowego kroku sortowania. Porządek można określić tylko dla indeksów opartych ob-drzewa. Planer przetwarza zapytanie z ORDER BY albo dopasowując indeks, albo przeglądając całą tabelę i sortując wyniki. Jeżeli zapytanie wymaga przejrzenia dużej części tabeli, przejrzenie rekordów w kolejności fizycznej i posortowanie może wymagać mniej operacji I/O na dysku.

oparte o B-drzewa Domyślnie wartości klucza wyszukiwania sortowane są rosnąco, znullaminakońcu.zachowanietomożnazmienić: CREATE INDEX test2_info_nulls_low ON test2 (info NULLS FIRST); CREATE INDEX test3_desc_index ON test3 (id DESC NULLS LAST); Indeks może być wykorzystany dla zapytań z klauzulą ORDER BY identyczną bądź całkowicie odwrotną.

unikalne Indeks może wymuszać unikalność wartości w kolumnie, bądź unikalność kombinacji wartości w kolumnach (w przypadku indeksu złożonego). CREATE UNIQUE INDEX name ON table (column [,...]); Wartości NULL nie są uważane za identyczne. PostgreSQL automatycznie tworzy unikalny indeks gdy definiowany jest klucz główny lub ograniczenie UNIQUE.

na wyrażeniach Klucz wyszukiwania nie musi składać się tylko z kolumn, może również obejmować wyrażenia, np. dla zapytania: SELECT * FROM test1 WHERE lower(col1) = value ; przydatny może być indeks CREATE INDEX test1_lower_col1_idx ON test1 (lower(col1)); Można też indeksować konkatenowane stringi: CREATE INDEX people_names ON people ((first_name last_name));

częściowe Indeks może obejmować tylko część rekordów z tabeli. CREATE TABLE access_log ( url varchar, client_ip inet,... ); Gdybyśmy chcieli wyłączyć z indeksu lokalną podsieć, możemy go zdefiniować jako: CREATE INDEX access_log_client_ip_ix ON access_log (client_ip) WHERE NOT (client_ip > inet 192.168.100.0 AND client_ip < inet 192.168.100.255 );

Porządki sortowania Indeks wspiera tylko jeden porządek sortowania (ang. collation) dla kolumny: CREATE TABLE test1c ( id integer, content varchar COLLATE "x" ); CREATE INDEX test1c_content_index ON test1c (content); Zapytania typu: SELECT * FROM test1c WHERE content > constant; działają, bo stała jest automatycznie rzutowana na odpowiedni porządek sortowania.

Porządki sortowania, c.d. Indeks jednak nie zadziała dla stałej o innym porządku sortowania, np: SELECT * FROM test1c WHERE content > constant COLLATE "y"; Możliwe jest jednak zbudowanie indeksu dla innego porządku sortowania: CREATE INDEX test1c_content_y_index ON test1c (content COLLATE "y");