SQLab
УчёбаПрактикаЗадачиАренаРейтинг
© 2026 SQLab · Ташкент
SQLab

Учите SQL прямо в браузере — ничего не нужно устанавливать.

Платформа

  • Учёба
  • Практика
  • Задачи
  • Арена
  • Рейтинг

Для кого

  • Студентам
  • Преподавателям
  • Университетам
© 2026 SQLab. Все права защищены.Сделано в Узбекистане для студентов.
УчёбаПрактикаЗадачиАренаРейтинг
0/26

Основы

  • Что такое база данных?
  • Первый SELECT
  • WHERE: отбор нужных строк
  • IN, BETWEEN, LIKE и NULL
  • Сортировка, LIMIT и DISTINCT

Вычисления

  • Выражения, функции и CASE
  • Работа с датами
  • COUNT, SUM, AVG, MIN, MAX
  • GROUP BY и HAVING

Соединение таблиц

  • Ключи и связи
  • INNER JOIN
  • LEFT JOIN и строки без пары
  • Несколько таблиц и self join

Сложные запросы

  • Подзапросы
  • UNION, INTERSECT, EXCEPT
  • WITH: именованные запросы
  • Оконные функции

Создание и изменение таблиц

  • CREATE TABLE: типы и ограничения
  • INSERT, UPDATE, DELETE
  • ALTER, DROP, TRUNCATE
  • Как правильно спроектировать базу

Профессиональный уровень

  • Индексы и EXPLAIN
  • Транзакции и ACID
  • VIEW: сохранённые запросы
  • Функции, процедуры, триггеры
  • Пользователи, права и резервные копии
Учёба/Профессиональный уровень

Индексы и EXPLAIN

229 мин

Если в таблице сто строк, база просмотрит их мгновенно. Если миллион — читать все строки ради каждого запроса медленно. Эту проблему решает индекс.

Индекс — как указатель в конце книги

Чтобы найти в книге слово «транзакция», вы не листаете все страницы — вы смотрите алфавитный указатель в конце и сразу открываете нужную страницу. Индекс устроен так же: значения столбца хранятся отдельно в отсортированном виде, и каждое указывает на строку.

CREATE INDEX idx_students_city ON students (city);

Теперь WHERE city = 'Samarqand' читает не всю таблицу, а только индекс.

Как база выполняет запрос: EXPLAIN

EXPLAIN не выполняет запрос, а показывает его план:

university· Попробуйте изменить
EXPLAIN SELECT * FROM students WHERE id = 10;

В плане PostgreSQL Index Scan using students_pkey — использован индекс первичного ключа. А Seq Scan означает, что таблица читалась целиком по порядку.

Поиск по столбцу без индекса:

university· Попробуйте изменить
EXPLAIN SELECT * FROM students WHERE city = 'Samarqand';

Здесь база читает всю таблицу — индекса на city нет.

Когда нужен индекс

  • столбцы, которые часто стоят в WHERE, JOIN … ON, ORDER BY;
  • столбцы внешних ключей (grades.student_id) — ускоряются JOIN;
  • столбцы, которые не должны повторяться, — CREATE UNIQUE INDEX.

Для первичного ключа и UNIQUE индекс создаётся автоматически.

PostgreSQL сам индекс на столбце внешнего ключа не создаёт — его нужно добавить вручную: CREATE INDEX ON grades (student_id);

Цена индекса

Индекс не бесплатен:

  • занимает место на диске;
  • каждый INSERT, UPDATE, DELETE обновляет и индекс — запись замедляется.

Поэтому «индекс на каждый столбец» — плохая идея. Добавляйте индекс под конкретный медленный запрос и проверяйте результат через EXPLAIN.

Когда индекс не срабатывает

  • столбец внутри функции: WHERE UPPER(city) = 'TOSHKENT' — обычный индекс не используется;
  • LIKE '%bek' — шаблон с неизвестным началом;
  • очень маленькая таблица — базе всё равно проще прочитать её целиком.

Индекс по нескольким столбцам

CREATE INDEX idx_orders_customer_date ON orders (customer_id, ordered_at);

Он работает для WHERE customer_id = 5 и для WHERE customer_id = 5 AND ordered_at > …, но не для одного WHERE ordered_at > … — порядок важен (телефонный справочник отсортирован сначала по фамилии, потом по имени).

Запомните

  • Индекс — отсортированный указатель, ускоряющий поиск.
  • EXPLAIN показывает план запроса; с его помощью ищут полное сканирование.
  • Индекс ускоряет чтение и замедляет запись — добавляйте обдуманно.
Предыдущий урокКак правильно спроектировать базуСледующий урокТранзакции и ACID

Содержание

  • Индекс — как указатель в конце книги
  • Как база выполняет запрос: EXPLAIN
  • Когда нужен индекс
  • Цена индекса
  • Когда индекс не срабатывает
  • Индекс по нескольким столбцам
  • Запомните
УчёбаПрактикаЗадачиАренаРейтинг

SQLab