.NET Tutorial

Базы данных и SQL

ACID и уровни изоляции, индексы и B-Tree, планы запросов, нормализация, JOIN-ы, оконные функции, deadlock-и, репликация и шардирование.

Junior должен уверенно писать запросы и JOIN-ы. Middle — уметь объяснить, почему он медленный: прочитать план выполнения, подобрать индекс, понять, какой уровень изоляции нужен и откуда взялся deadlock.

  1. 1 Основы SQL: SELECT, WHERE, GROUP BY, HAVING, ORDER BY и порядок выполнения запроса? Реляционная БД хранит данные в таблицах (строки и столбцы). Первичный ключ (PK) однозначно идентифицирует строку, внешний ключ (FK) ссылается на строку другой таблицы и … Junior6 мин
  2. 2 ACID — что означает каждое свойство, как обеспечивается в SQL? Atomicity (атомарность) — транзакция выполняется целиком или никак. Обеспечивается журналом (WAL/transaction log) и механизмом отката (undo / версии строк). Consistency … Junior6 мин
  3. 3 Уровни изоляции транзакций: Read Uncommitted → Serializable, аномалии? Аномалии параллельных транзакций: dirty read (чтение незафиксированного), non-repeatable read (повторное чтение строки даёт другое значение), phantom read (повторный зап… Middle7 мин
  4. 4 Индексы: Clustered vs Non-Clustered, Covering Index, когда не помогают? Индекс — отдельная упорядоченная структура (обычно B-Tree), позволяющая найти строки без полного сканирования таблицы. Ускоряет чтение, замедляет запись и занимает место… Middle7 мин
  5. 5 EXPLAIN / Query Plan — как читать и оптимизировать? План выполнения — дерево операций, которое выбрал оптимизатор на основе статистики и оценок стоимости. EXPLAIN показывает план и оценки, EXPLAIN ANALYZE — выполняет запр… Middle7 мин
  6. 6 Нормализация: 1NF-3NF-BCNF, денормализация — когда оправдана? Нормализация — организация данных так, чтобы каждый факт хранился в одном месте. Цель — избежать аномалий: вставки, обновления, удаления. 1NF — атомарные значения, нет п… Junior6 мин
  7. 7 JOIN-ы: INNER, LEFT, RIGHT, FULL OUTER, CROSS, самосоединение? INNER JOIN — только пары строк, у которых условие соединения выполнено (пересечение). LEFT JOIN — все строки левой таблицы + совпадения справа; нет совпадения → NULL в п… Junior7 мин
  8. 8 Window Functions: ROW_NUMBER, RANK, LAG, LEAD, PARTITION BY? Оконная функция вычисляет значение для каждой строки на основе набора связанных строк («окна»), не схлопывая строки, в отличие от GROUP BY. Синтаксис: функция() OVER (PA… Middle7 мин
  9. 9 CTE (WITH) vs подзапросы vs временные таблицы — разница? Подзапрос — запрос внутри запроса (в WHERE, FROM, SELECT). Бывает коррелированным (зависит от строки внешнего запроса) и некоррелированным. CTE (WITH name AS (...)) — им… Middle6 мин
  10. 10 Deadlocks — почему возникают и как избежать? Deadlock — две (или больше) транзакции ждут друг друга по кругу: T1 держит ресурс A и ждёт B, T2 держит B и ждёт A. Сами они никогда не завершатся. СУБД обнаруживает цик… Middle6 мин
  11. 11 Репликация vs Шардирование vs Партиционирование? Репликация — копии одних и тех же данных на нескольких серверах. Цели: отказоустойчивость (failover) и масштабирование чтения (read replicas). Запись обычно идёт в один … Senior6 мин
  12. 12 Разница между SQL и NoSQL: когда выбирать каждый? SQL (реляционные): данные в таблицах со строгой схемой, связи через внешние ключи, мощный язык запросов с JOIN-ами и агрегатами, ACID-транзакции. PostgreSQL, SQL Server,… Junior6 мин
  13. 13 Что такое CAP-теорема применительно к БД? CAP: распределённая система при сетевом разделении (Partition) должна выбрать между Consistency (все узлы отвечают актуальными данными или отказывают) и Availability (ка… Senior6 мин
  14. 14 Виды индексов: Clustered, Non-Clustered, Unique, Filtered, Partial, Composite, Full-Text? Clustered — определяет физический порядок строк, один на таблицу (SQL Server, InnoDB). Non-clustered — отдельная структура со ссылками на строки, много на таблицу. Uniqu… Middle7 мин
  15. 15 Как работает B-Tree индекс под капотом? В СУБД используется B+-дерево: сбалансированное дерево из страниц (обычно 8 КБ), где все значения хранятся в листьях, а внутренние узлы содержат только ключи-разделители… Senior7 мин
  16. 16 Hash индексы, GIN, GiST, BRIN — специализированные индексы PostgreSQL? B-Tree (по умолчанию) — равенство, диапазоны, сортировка. Подходит в 90% случаев. Hash — только =; компактнее B-Tree для длинных ключей. С PostgreSQL 10 журналируется и … Senior7 мин
  17. 17 Статистика в PostgreSQL/SQL Server, ANALYZE, auto-vacuum? Статистика — сводка о распределении данных в столбцах: число строк, доля NULL, число различных значений, самые частые значения (MCV), гистограмма, корреляция с физически… Senior7 мин