Ответ
Индекс — это вспомогательная структура данных (чаще всего B-дерево), которая ускоряет операции поиска (WHERE), соединения (JOIN) и сортировки (ORDER BY) за счет предварительно упорядоченного представления данных по определенным столбцам.
Принцип работы: Представьте книгу без оглавления: чтобы найти главу, нужно просмотреть все страницы. Индекс — это и есть оглавление, позволяющее СУБД быстро найти адрес нужных данных.
Основные типы индексов:
- Кластерный индекс (Clustered): Определяет физический порядок хранения строк в таблице. Таблица может иметь только один кластерный индекс (часто это первичный ключ
PRIMARY KEY). Данные в таблице отсортированы по значениям этого индекса. - Некластерный индекс (Non-clustered): Это отдельная структура, которая хранит ключи индекса и указатели на соответствующие строки в таблице. На одной таблице можно создать множество некластерных индексов.
Пример создания в SQL:
-- Создание некластерного индекса по столбцу Email
CREATE INDEX IX_Users_Email ON Users(Email);
-- Создание уникального некластерного индекса
CREATE UNIQUE INDEX IX_Users_Username ON Users(Username);
-- Составной индекс (по нескольким столбцам)
CREATE INDEX IX_Orders_Status_Created ON Orders(Status, CreatedDate);
| Преимущества и недостатки: | Преимущества | Недостатки |
|---|---|---|
Резкое ускорение операций чтения (SELECT). |
Замедление операций записи (INSERT, UPDATE, DELETE), так как индексы необходимо перестраивать. |
|
Обеспечение уникальности данных (UNIQUE). |
Дополнительное потребление дискового пространства. | |
| Ускорение сортировки и группировки. | Неправильный выбор индексов может ухудшить производительность. |
Правила применения:
- Индексируйте столбцы, часто используемые в условиях
WHERE,JOINиORDER BY. - Для составных индексов важен порядок столбцов. Первым должен идти столбец с наибольшей селективностью.
- Избегайте индексации часто изменяемых столбцов или столбцов с малым количеством уникальных значений (низкая селективность).
Видео-ответы
▶
РЕАЛЬНОЕ СОБЕСЕДОВАНИЕ SENIOR PHP BACKEND РАЗРАБОТЧИКА В МТС (330к)
▶
SENIOR Java Собеседование | Backend-Mock интервью
▶
Собеседование на позицию Senior Python Developer 4000-5000$ #11
▶
Собеседование на позицию Senior Python Developer 4000$ #9
▶
Собеседование на .NET разработчика (backend)
▶
Собеседование Python developer на 3000$
▶
СОБЕСЕДОВАНИЕ НА ВЕДУЩЕГО ПРОГРАММИСТА 1С. УРОВЕНЬ MIDDLE+. ЗАРПЛАТА 250 000
▶
Открытое интервью на Middle Go-разработчика
▶
Открытое интервью на Go-разработчика
▶
Тестовое интервью в Сбер на Middle Java с лайв-кодингом
▶
Моковое собеседование на Middle Golang разработчика | Solvery & Uproger
▶
НАВАЛИВАЮ КРИНЖА НА СОБЕСЕ В MTS DIGITAL GOLANG BACKEND
▶
Открытое собеседование на Middle-Go разработчика
▶
Тестовое собеседование на позицию Go-разработчика / Ingternet
▶
Легчайшее JAVA собеседование в моей жизни
▶
Ruby собеседование на позицию Middle
▶
Открытое собеседование на Golang разработчика
▶
Собеседование middle backend php
▶
Собеседование на Middle PHP разработчика
▶
Собеседование на позицию Backend Developer Python + Django Middle #1
▶
Собеседование junior python разработчик Антон Серебряков
▶
Тестовое интервью с Михаилом на позицию Junior Python-разработчик
▶
Открытое интервью на Go-разработчика
▶
Junior Python-инженер | Собеседование