← К оглавлению занятия

📖 Теория

📁 Блок: SQL / MySQL / Повторение индексов и функций ⏱️ Время изучения: ~60 мин 🎯 Сложность: Повторение

⚡ Кратко: 📖 теория

Summary session 11 соединяет два блока: индексы и пользовательские функции.

Индекс ускоряет поиск, сортировку или группировку, но занимает место и замедляет изменения данных.

EXPLAIN показывает план выполнения и помогает проверить, использует ли MySQL индекс.

Пользовательская функция создаётся через CREATE FUNCTION и возвращает одно значение через RETURN.

Минимальный пример повторения: CREATE INDEX idx_age ON employees(age); и SELECT square_root(25);.

Топ-3 ошибки: индексировать всё подряд, не смотреть EXPLAIN, путать функцию с процедурой.

Блок 1. Индексы

Индексация — способ организации данных, который ускоряет выполнение запросов. Индекс — структура данных, которая помогает быстрее находить нужные строки без полного сканирования таблицы.

PRIMARY KEY

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

UNIQUE INDEX

Гарантирует уникальность значений в одном или нескольких столбцах.

INDEX

Обычный индекс ускоряет поиск, но не запрещает дубликаты.

FULLTEXT INDEX

Используется для полнотекстового поиска по текстовым полям.

COMPOSITE INDEX

Создаётся на несколько столбцов для запросов с несколькими условиями.

Блок 2. Как индекс ускоряет запрос

SELECT *
FROM employees
WHERE age = 30;

Без индекса MySQL просматривает строки таблицы, чтобы найти сотрудников нужного возраста.

CREATE INDEX idx_age ON employees(age);

EXPLAIN
SELECT *
FROM employees
WHERE age = 30;

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

Блок 3. Пользовательские функции

Пользовательская функция создаётся командой CREATE FUNCTION, принимает параметры и возвращает одно значение.

CREATE FUNCTION function_name(parameter1 datatype)
RETURNS return_datatype
DETERMINISTIC
BEGIN
    RETURN return_value;
END;

В summary повторяются функции square_root, calculate_age и greet_user, а также различие DETERMINISTIC и NON-DETERMINISTIC.