Базы данных (Data Base)
8.23K subscribers
558 photos
468 videos
19 files
537 links
Базы данных (Data Base). По всем вопросам @evgenycarter
Download Telegram
Хранилища данных

Транзакции | Введение | ACID | CAP | Обработка ошибок
Аномалии параллельных транзакций
Индексы SQL
Подготовка к собесу - Классификация баз данных
Подготовка к собесу - Оптимизация запросов
Подготовка к собесу - Подзапросы SQL и оптимизация
Подготовка к собесу - Индексы и партиции SQL

источник

Мы в MAX

#db

👉 @database_info
👍72🔥2
This media is not supported in your browser
VIEW IN TELEGRAM
Как лучше всего изучать язык SQL?

В 1986 году язык SQL (Structured Query Language) стал стандартом. В течение последующих 40 лет он стал доминирующим языком для систем управления реляционными базами данных. Чтение последнего стандарта (ANSI SQL 2016) может занять много времени. Как я могу его выучить?

В состав языка SQL входят 5 компонентов:
- DDL: data definition language, such as CREATE, ALTER, DROP
- DQL: data query language, such as SELECT
- DML: data manipulation language, such as INSERT, UPDATE, DELETE
- DCL: data control language, such as GRANT, REVOKE
- TCL: transaction control language, such as COMMIT, ROLLBACK

Для бэкенд-инженера может потребоваться знание большинства из них. Аналитику данных может потребоваться хорошее понимание DQL. Выберите те темы, которые наиболее актуальны для вас.

Мы в MAX

#db

👉 @database_info
🔥8👍1
Безумные и забавные факты о SQLite

⚫️SQLite — самая часто разворачиваемая и используемая база данных. На текущий момент активно используется более одного триллиона (1000000000000 или миллиона миллионов) баз данных SQLite.

⚫️Её поддерживают три человека. Они не допускают внешних контрибьюторов.
Скорее всего, SQLite используется больше, чем все остальные движки баз данных суммарно. В мире работают миллиарды копий SQLite. Её можно встретить повсюду.

https://habr.com/ru/companies/ruvds/articles/873816/

Мы в MAX

#db

👉 @database_info
Please open Telegram to view this post
VIEW IN TELEGRAM
1👍9
База данных PostgreSQL

Часть 1. Установка и настройка
Часть 2. Язык запросов SQL
Часть 3. Реляционная модель
Часть 4. Поиск и анализ данных
Часть 5. Индексы

источник

Мы в MAX

#db

👉 @database_info
1👍53🔥2
Media is too big
VIEW IN TELEGRAM
NoSQL для начинающих на примере MongoDB

00:00 - Что такое NoSQL и где он применяется?
04:18 - Основные виды NoSQL
06:04 - Дополнительные темы
09:31 - SQL vs NoSQL
11:53 - Немного о MongoDB
14:37 - Практика. Моделирование структуры. Работа с shell и Compass

Мы в MAX

#db

👉 @database_info
1👍31
Храните данные ближе к клиентам 📩

Разверните файловые хранилища, медиасерверы, большие архивы данных и системы аналитики на сервере-хранилище от Selectel в Новосибирске.

Отличное решение, если:
📍вы работаете с проектами из Сибири и с Дальнего Востока,
📍вам важна географическая распределенность.

Закажите сервер SL108R в Selectel и храните данные там, где удобно:
https://slc.tl/y00o0?erid=2W5zFHha3qr
🚀 Оптимизация запросов в SQL: как не утонуть в данных

Сегодня хочу поделиться мыслями на тему, которая часто становится болью для многих разработчиков баз данных — оптимизация SQL-запросов.

Когда база данных растёт, а запросы становятся сложнее, даже небольшой промах может привести к тому, что ваш сервер начнёт "плакать" под нагрузкой. Вот несколько советов, которые помогут вам держать запросы в тонусе:

1. Индексы — ваш лучший друг (и враг, если использовать неправильно)
Индексы ускоряют поиск данных, но их избыток может замедлить вставку и обновление. Используйте их с умом:
- Индексируйте только те столбцы, которые часто используются в условиях WHERE, JOIN и ORDER BY.
- Избегайте индексов на столбцах с низкой селективностью (например, пол с значениями "М" и "Ж").

2. Анализируйте план выполнения запроса
Перед тем как оптимизировать, нужно понять, что именно тормозит. Используйте EXPLAIN (или EXPLAIN ANALYZE в PostgreSQL) для анализа плана выполнения. Обратите внимание на:
- Полноценные сканирования таблиц (Seq Scan).
- Вложенные циклы (Nested Loop), которые могут быть медленными на больших данных.
- Использование временных таблиц и сортировок.

3. Избегайте N+1 проблемы
Если вы работаете с ORM, убедитесь, что не делаете лишних запросов. Например, вместо того чтобы выбирать связанные данные в цикле, используйте JOIN или prefetch_related (в Django).

4. Кэшируйте то, что можно кэшировать
Не все данные нужно каждый раз запрашивать из базы. Используйте кэширование для часто запрашиваемых данных. Redis или Memcached — отличные инструменты для этого.

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

6. Следите за статистикой
Базы данных часто используют статистику для оптимизации запросов. Убедитесь, что она актуальна. Например, в PostgreSQL можно обновить статистику с помощью команды ANALYZE.

7. Не забывайте про мониторинг
Используйте инструменты для мониторинга производительности базы данных, такие как pg_stat_activity в PostgreSQL или Performance Schema в MySQL. Это поможет вовремя выявить "узкие" места.

Мы в MAX

#db

👉 @database_info
👍7
Шпаргалка по оконным функциям в SQL

Мы в MAX

#db

👉 @database_info
👍9🔥51
🔥 Оптимизация сложных SQL-запросов: Как уменьшить время выполнения?

🛠 Основные проблемы:
🔹 Чрезмерное количество JOIN – могут приводить к тяжелым вычислениям.
🔹 Неправильные индексы – или их отсутствие вообще.
🔹 Подзапросы вместо JOIN – иногда работают хуже, чем соединения.
🔹 Ненужные SELECT * – выбираем только нужные колонки.
🔹 Фильтрация после JOIN – фильтруем данные как можно раньше.

Как ускорить запрос?
1️⃣ Проверьте индексы – используйте EXPLAIN перед выполнением запроса. Если сканируется весь таблица (Full Table Scan), значит, нужны индексы.
2️⃣ Разбейте сложный запрос на части – иногда лучше записать результат во временную таблицу.
3️⃣ Избегайте SELECT * – указывайте только нужные колонки.
4️⃣ Используйте EXISTS вместо IN – в подзапросах это часто работает быстрее.
5️⃣ Тестируйте с разными JOIN – попробуйте INNER JOIN, LEFT JOIN, а в некоторых случаях UNION.
6️⃣ Оптимизируйте сортировкуORDER BY без индексов тормозит запрос.

Мы в MAX

#db

👉 @database_info
👍54
🖥 Быстрая справка по масштабированию баз данных

Мы в MAX

#db

👉 @database_info
Please open Telegram to view this post
VIEW IN TELEGRAM
👍2
Оптимизация запросов: Индексы vs. Анализ плана выполнения 🚀

Сейчас я покажу вам, почему простое добавление индексов не всегда ускоряет запросы. Часто встречаю ситуацию, когда разработчики по умолчанию добавляют индексы на каждое поле WHERE, но запросы всё равно работают медленно. Давайте разберёмся!

🔹 Миф: индексы всегда ускоряют запросы
На самом деле, индекс может даже замедлить выполнение, если:
Запрос возвращает слишком много строк - сканирование индекса будет дороже, чем полное сканирование таблицы.
Индекс не покрывает весь запрос - приходится делать обращения к основной таблице.
Слишком много индексов - это замедляет INSERT/UPDATE/DELETE.

🔹 Как правильно анализировать?
Используйте EXPLAIN ANALYZE (PostgreSQL) или EXPLAIN FORMAT=JSON (MySQL) для понимания:
🔍 Используется ли индекс?
🔍 Сколько строк проходит сканирование?
🔍 Есть ли операции сортировки, которые можно избежать с индексом?

🔹 Что делать, если запрос медленный?
1️⃣ Проверить план выполнения (не добавлять индекс вслепую!).
2️⃣ Подумать о составных индексах, если запрос фильтрует по нескольким полям.
3️⃣ Проверить, можно ли избежать сортировки (ORDER BY по индексу).
4️⃣ Рассмотреть материализованные представления для сложных агрегатов.

Мы в MAX

#db

👉 @database_info
👍54
🔥 Оптимизация SQL-запросов: 5 ключевых техник

Сегодня я покажу вам, как ускорить выполнение SQL-запросов, ведь никто не любит ждать, пока база данных "думает". 🚀

1️⃣ Используйте индексы
Индексы – это ускоритель запросов. Если у вас часто выполняются WHERE, JOIN или ORDER BY по определенному столбцу – создайте для него индекс. Но не переборщите: индексы ускоряют чтение, но замедляют вставку и обновление данных.

2️⃣ Избегайте SELECT *
Выбирайте только нужные столбцы. SELECT * может загружать ненужные данные и нагружать сервер. Лучше указывать конкретные столбцы.

3️⃣ Нормализация или денормализация?
Иногда стоит разбивать таблицы (нормализация) для устранения дублирования данных. В других случаях – наоборот, объединять (денормализация) ради быстродействия. Анализируйте ситуацию!

4️⃣ Кеширование запросов
Если запрос выполняется часто и данные редко меняются, используйте QUERY CACHE или внешние кеширующие механизмы (Redis, Memcached).

5️⃣ Анализируйте планы выполнения
Команда EXPLAIN в MySQL/PostgreSQL покажет, как СУБД выполняет запрос. Это поможет найти узкие места: медленные JOIN'ы, сканы всей таблицы и т.д.

💡 Используете ли вы эти техники? Напишите, какой метод вам помог ускорить работу БД!

Мы в MAX

#db

👉 @database_info
👍61