KWALIFIKACJA INF3 - CZERWIEC 2014

PYTANIE NR 23.
Co należy zastosować w organizacji danych, aby zapytania w bazie danych były wykonywane szybciej?
A.
B.
C.
D.
Wyjaśnienie poprawnej odpowiedzi:
Indeksy przyspieszają wykonywanie zapytań, ponieważ tworzą dodatkową strukturę danych umożliwiającą szybsze wyszukiwanie i sortowanie rekordów bez pełnego skanowania tabeli. "Reguły" i "wartości domyślne" dotyczą spójności/wstawiania danych, a "klucz podstawowy" to ograniczenie (często indeksowane), nie ogólna metoda optymalizacji.

Pełne wyjaśnienie:

W relacyjnych bazach danych najczęstszym powodem "wolnych zapytań" jest konieczność przeglądania dużej liczby wierszy w tabeli. Indeks to dodatkowa struktura (najczęściej drzewo B lub podobna), która pozwala szybciej odnaleźć wiersze spełniające warunek, wykonać sortowanie lub usprawnić łączenie tabel. Dzięki temu silnik bazy może zamiast pełnego skanowania tabeli wykonać wyszukanie po indeksie i pobrać tylko potrzebne rekordy.

Odpowiedź "Indeksy." jest poprawna, bo bezpośrednio odnosi się do organizacji danych pod kątem szybkości odczytu.

  • "Reguły." – reguły (np. ograniczenia integralności, reguły biznesowe, wyzwalacze) służą do kontrolowania poprawności operacji lub automatyzacji działań, ale same w sobie nie są mechanizmem przyspieszania wyszukiwania danych; mogą wręcz dodawać koszt przy modyfikacjach.
  • "Wartości domyślne." – wpływają na to, jak dane są wstawiane, gdy nie podano wartości kolumny. Nie zmieniają sposobu wyszukiwania danych przez silnik zapytań, więc nie są narzędziem optymalizacji SELECT.
  • "Klucze podstawowe." – zapewniają jednoznaczną identyfikację rekordu (unikalność i niepustość). W wielu DBMS klucz podstawowy jest automatycznie indeksowany, ale istotą przyspieszenia jest właśnie indeks, a nie samo ograniczenie. Dodatkowo nie każde zapytanie korzysta wyłącznie z kolumny klucza podstawowego.

Wskazówka egzaminacyjna: jeśli pytanie dotyczy przyspieszenia zapytań, szukaj odpowiedzi związanych z indeksami, planem zapytania i optymalizatorem. Pojęcia dotyczące integralności danych (klucze, reguły, wartości domyślne) rozwiązują inny problem: poprawność danych, a nie szybkość wyszukiwania.

Dodatkowe pytania

Dodatkowe pytania (FAQ):
Indeks to dodatkowa struktura danych tworzona dla jednej lub kilku kolumn tabeli. Ułatwia szybkie wyszukiwanie, sortowanie i łączenie danych, ograniczając potrzebę przeglądania całej tabeli. Zwykle przyspiesza odczyt (SELECT), ale może spowalniać modyfikacje (INSERT/UPDATE/DELETE).
Indeks pozwala silnikowi bazy odnaleźć pasujące wiersze po uporządkowanej strukturze (np. drzewiastej), zamiast wykonywać pełny skan tabeli. Dzięki temu zmniejsza się liczba odczytanych stron danych i operacji porównania, co jest kluczowe przy dużych tabelach i selektywnych warunkach WHERE.
Klucz podstawowy zwykle dotyczy jednej kolumny (lub zestawu kolumn) i jest użyteczny, gdy filtrujesz właśnie po nim. W praktyce aplikacje często filtrują po innych polach (np. email, status, data), wykonują sortowanie lub złożone warunki. Wtedy potrzebne są dodatkowe indeksy dopasowane do realnych zapytań.
Każdy indeks trzeba utrzymywać, więc operacje modyfikujące dane (INSERT/UPDATE/DELETE) stają się wolniejsze, bo oprócz tabeli zmieniają się też indeksy. Indeksy zajmują miejsce na dysku i w pamięci. Zbyt wiele indeksów może też utrudniać optymalizatorowi wybór najlepszego planu.
Indeks złożony ma sens, gdy często filtrujesz lub sortujesz po kilku kolumnach w określonej kolejności, np. WHERE klient_id = ? AND data > ?. Kluczowa jest kolejność kolumn w indeksie: powinna odzwierciedlać typowe warunki zapytań. Tworzenie indeksu "na zapas" bywa nieskuteczne.
W większości DBMS służą do tego narzędzia pokazujące plan wykonania zapytania (np. polecenie EXPLAIN). Plan informuje, czy wykonywany jest skan tabeli, czy odczyt po indeksie oraz jaki jest szacowany koszt operacji. To praktyczny sposób weryfikacji, czy indeks pomaga.
Pełny skan tabeli oznacza odczytanie wszystkich (lub prawie wszystkich) wierszy, aby sprawdzić warunek zapytania. Przy dużych tabelach wymaga to wielu operacji dyskowych i porównań, więc trwa długo. Indeks ogranicza liczbę sprawdzanych wierszy, kierując bazę bezpośrednio do pasujących danych.
Zwykle nie. Wartości domyślne wpływają na to, jak dane są wstawiane, gdy aplikacja nie poda wartości kolumny. Nie tworzą dodatkowej struktury wyszukiwania ani nie zmieniają sposobu filtrowania rekordów w SELECT. Wydajność zapytań zależy raczej od indeksów, statystyk i konstrukcji zapytania.
Częste błędy to: indeksowanie zbyt wielu kolumn "na wszelki wypadek", brak dopasowania do realnych warunków WHERE i JOIN, ignorowanie kolejności kolumn w indeksie złożonym oraz nieuwzględnianie kosztu modyfikacji danych. Warto analizować najwolniejsze zapytania i ich plany wykonania.
Powtórz definicję indeksu, różnicę między kluczem a indeksem oraz typowe skutki uboczne (koszt zapisu). Przećwicz przykłady: kiedy indeks pomaga, a kiedy nie (np. mała tabela, mało selektywny warunek). Jeśli masz możliwość, wykonaj kilka poleceń EXPLAIN na prostych kwerendach.
info

To pytanie poprawnie rozwiązuje 63% zdających egzamin. średnie

Specjaliści zwracają uwagę: "Indeksy przyspieszają wykonywanie zapytań, ponieważ tworzą dodatkową strukturę danych umożliwiającą szybsze wyszukiwanie i sortowanie rekordów bez pełnego skanowania tabeli."

Źródła:

  • PostgreSQL Documentation: "Indexes" (Chapter 11), https://www.postgresql.org/docs/current/indexes.html - accessed 2026-02-27
  • MySQL 8.0 Reference Manual: "Optimization and Indexes" / "How MySQL Uses Indexes", https://dev.mysql.com/doc/refman/8.0/en/mysql-indexes.html - accessed 2026-02-27
  • SQLite Documentation: "Indexes", https://www.sqlite.org/lang_createindex.html - accessed 2026-02-27

Materiały:

  • Dokumentacja wybranego systemu DBMS (np. PostgreSQL/MySQL) – rozdział o indeksach
  • Materiały o optymalizacji SQL: selektywność kolumn, indeksy złożone, wpływ indeksów na INSERT/UPDATE
  • Ćwiczenia z użyciem EXPLAIN/EXPLAIN ANALYZE do interpretacji planu zapytania

Aktualizacja pytania: 31.03.2026



Aktualizacja pytania: 31.03.2026
📡 Brak połączenia internetowego