SQL Portal | Базы Данных
14.4K subscribers
610 photos
82 videos
41 files
504 links
Присоединяйтесь к нашему каналу и погрузитесь в мир баз данных

Связь: @devmangx

РКН: https://clck.ru/3H4Wo3
Download Telegram
This media is not supported in your browser
VIEW IN TELEGRAM
Наткнулся на интересный проект — Rainfrog

Это терминальное приложение для работы с PostgreSQL, которое можно описать как лёгкую, минималистичную альтернативу pgAdmin или DBeaver, но без GUI и перегруза.

Если привык работать в терминале и ценишь скорость — стоит попробовать

👉 @SQLPortal
Please open Telegram to view this post
VIEW IN TELEGRAM
5👍3🔥1
Больше индексов ≠ выше производительность

💡 Совет: не стоит индексировать всё подряд.

Почему?

➟ Каждый индекс добавляет издержки при изменении данных (вставка, обновление, удаление)
➟ Сосредоточьтесь на столбцах, которые часто используются в WHERE, JOIN, ORDER BY или GROUP BY.

Типы индексов в базе данных:

1. Кластерный индекс
🟡Физически переупорядочивает строки данных на основе ключа индекса.
🟡Только один на таблицу.
🟡Значительно ускоряет диапазонные запросы (например, «найти все заказы между датами X и Y») и запросы по индексируемым столбцам.
🟡Может замедлять модификации данных (вставки, обновления, удаления) из-за переупорядочивания.

2. Некластерный индекс
🟡Создаёт отдельную структуру с указателями на строки данных, отсортированными по ключу индекса.
🟡Может быть несколько на одну таблицу.
🟡Эффективен для точечных запросов (например, «найти клиента с ID 123»).
🟡Может использоваться как покрывающий индекс, если включает все нужные для запроса столбцы.

3. Уникальный индекс
🟡Гарантирует уникальность значений в столбце или комбинации столбцов.
🟡Может быть кластерным или некластерным.
🟡Предотвращает дублирование значений, обеспечивая целостность данных.
🟡Часто используется для альтернативных ключей (не основного ключа), которые должны быть уникальными.

4. Фильтрованный индекс
🟡Индексирует только подмножество строк, соответствующее фильтрующему условию.
🟡Повышает производительность запросов, которые часто используют указанный фильтр.
🟡Уменьшает размер индекса по сравнению с индексом на всю таблицу.

5. Полнотекстовый индекс
🟡Обеспечивает эффективный поиск по текстовым данным (например, документы, статьи) по ключевым словам и фразам.
🟡Использует специальные алгоритмы индексирования и поиска (например, инвертированные индексы).
🟡Поддерживает лингвистические функции, такие как стемминг и тезаурус.

6. Составной индекс
🟡Индекс, созданный на нескольких столбцах.
🟡Может быть кластерным или некластерным.
🟡Оптимизирует запросы, фильтрующие или сортирующие по нескольким столбцам.
🟡Порядок столбцов в определении индекса имеет решающее значение для производительности.

7. Покрывающий индекс
🟡Включает все столбцы, необходимые для запроса, прямо в индекс, исключая необходимость обращаться к основной таблице.
🟡Может быть некластерным.
🟡Существенно ускоряет запросы, которым нужны только данные из индексируемых столбцов.

8. Индекс с включёнными столбцами
🟡Похож на покрывающий индекс, но включает только неключевые столбцы.
🟡Некластерный.
🟡Может улучшить производительность, если дополнительные столбцы часто используются в запросах.

9. XML-индекс
🟡Индексирует XML-данные для эффективного запроса с использованием XPath или специфичных XML-функций.
🟡Доступен в СУБД, поддерживающих XML-тип данных.
🟡Позволяет выполнять запросы к конкретным элементам или атрибутам внутри XML-документов.

10. Частичный индекс
🟡Индексирует только те строки, которые соответствуют определённому условию.
🟡Похож на фильтрованный индекс, но предоставляет больше гибкости в определении фильтра.
🟡Повышает производительность при специфичных кейсах запросов.

11. Битовый индекс
🟡Эффективно индексирует столбцы с низкой кардинальностью (немного уникальных значений).
🟡Хранит битовые карты, указывающие, какие строки содержат конкретное значение.


👉 @SQLPortal
Please open Telegram to view this post
VIEW IN TELEGRAM
👍11🔥3
Как превратить PostgreSQL в мощный поисковый движок?

📖 Читать: ссылка

👉 @SQLPortal | #cтатья
Please open Telegram to view this post
VIEW IN TELEGRAM
7🔥4
This media is not supported in your browser
VIEW IN TELEGRAM
О да, SQLZap — это прям находка

sqlzap.com — это онлайн-платформа для тренировок SQL-запросов в браузере. Что-то вроде интерактивного тренажёра

Идеально чтобы натаскать руку — как Leetcode, только для SQL

👉 @SQLPortal
Please open Telegram to view this post
VIEW IN TELEGRAM
👍9🔥1👀1
Учим SQL по мемам 🖕

👉 @SQLPortal
Please open Telegram to view this post
VIEW IN TELEGRAM
😁256👍2
Вот список 20 техник оптимизации SQL-запросов, которые я считаю достойными внимания:

1. Создавайте индекс на больших таблицах (>1.000.000 строк)
2. Используйте EXIST() вместо COUNT() для поиска элемента в таблице
3. Используйте SELECT с перечислением полей вместо SELECT *
4. Избегайте подзапросов в WHERE-условии
5. Избегайте SELECT DISTINCT, если это возможно
6. Используйте WHERE вместо HAVING
7. Создавайте соединения с помощью INNER JOIN (а не через WHERE)
8. Используйте LIMIT для выборки результатов
9. Используйте UNION ALL вместо UNION, где это возможно
10. Используйте UNION вместо конструкции WHERE ... OR ...
11. Запускайте запросы в непиковые часы
12. Избегайте использования OR в соединениях
13. Выбирайте GROUP BY вместо оконных функций
14. Используйте производные и временные таблицы
15. Удаляйте индекс перед загрузкой большого объема данных
16. Используйте материализованные представления вместо обычных
17. Избегайте оператора != или <> (не равно)
18. Минимизируйте количество подзапросов
19. Используйте INNER JOIN как можно реже, если можно получить тот же результат с LEFT/RIGHT JOIN
20. Чаще используйте временные источники для получения того же набора данных


👉 @SQLPortal
Please open Telegram to view this post
VIEW IN TELEGRAM
👍73🔥1😁1🤯1
Шпаргалка по SQL для пользователей SQL Server

1. Типы данных:

Точные числа: int, decimal, money, и т. д.
Приблизительные числа: float, real
Дата и время: datetime, timestamp
Строки char, varchar, text и Unicode версии

2. Функции работы с датой: GETDATE(), YEAR(), DATEADD(), DATEDIFF() и др.

3. Функции работы со строками: LEN(), LEFT(), RIGHT(), REPLACE(), SUBSTRING(), UPPER(), LOWER()

4. Математические функции: ABS(), ROUND(), CEILING(), FLOOR(), POWER(), SQRT()

5. Агрегатные функции: SUM(), AVG(), MAX(), MIN(), COUNT()

6. Создание объектов базы данных:

Хранимые процедуры: CREATE PROCEDURE
Триггеры: CREATE TRIGGER
Представления (view): CREATE VIEW
Индексы: CREATE INDEX
Функции: CREATE FUNCTION

7. Конвертация типов: CAST(), CONVERT()

8. Ранжирование и оконные функции: RANK(), DENSE_RANK(), ROW_NUMBER()

👉 @SQLPortal
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥11👍3
Задача с LeetCode — «Second Highest Salary»

Найти вторую по величине зарплату из таблицы Employee. Если такой нет — вернуть NULL

👉 @SQLPortal
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥10👍5
This media is not supported in your browser
VIEW IN TELEGRAM
Если ты новичок в SQL — это просто находка

Это сайт, который анимирует выполнение SQL-запросов.

Ты вставляешь SQL, жмёшь visualize — и видишь, как твой запрос "оживает": шаг за шагом показывает, как SELECT вытягивает данные, как JOIN соединяет таблицы, как фильтруются строки и т.д.

👉 @SQLPortal
Please open Telegram to view this post
VIEW IN TELEGRAM
👍13🔥7
PostgreSQL добавил поддержку Row-Level Security (RLS) ещё в 2016 году

Но большинство команд до сих пор её не включают.

А ведь это поразительно — потому что Postgres уже давно является основой для:

• Мультиарендных SaaS-приложений
• Встроенной аналитики
• Бэкендов для мобильных приложений

Он ACID-совместим. Надёжен как скала. Идеально подходит для транзакционных нагрузок.

Но с включённым RLS Postgres становится ещё и уровнем управления доступом.

Представим, что вы разрабатываете мультиарендную CRM:

1. Все данные клиентов хранятся в одной таблице
2. Пользователь должен видеть только свои записи
3. Вы добавляете WHERE tenant_id = ? в каждый запрос

А потом кто-то забывает добавить это условие.
Бах! Утечка данных. Классическая ошибка контроля доступа. 🔨

С RLS:

Вы один раз объявляете политику
Устанавливаете tenant_id при подключении
Выполняете запросы без забот о фильтрации по tenant_id

Теперь база сама принудительно применяет правила. Даже "плохие" запросы подчиняются политике, заданной на уровне СУБД — риск случайной утечки минимален.

Это подходит для:

• SaaS-бэкендов
• Аналитики на общих данных
• Внутренних инструментов

Везде, где нужен доступ на уровне строк без переписывания запросов.

Если вы полностью полагаетесь на проверки доступа на уровне приложения — подумайте о переносе части этой ответственности в СУБД с помощью RLS. Это и безопаснее, и проще. 🤨

👉 @SQLPortal
Please open Telegram to view this post
VIEW IN TELEGRAM
👍7🔥4
Топ 5+ задач на собеседование по SQL

1. Базы данных – ссылка
2. SQL-запросы – ссылка
3. MSSQL – ссылка
4. MySQL – ссылка
5. PostgreSQL – ссылка
6. Oracle – ссылка

👉 Больше задач тут: ссылка

👉 @SQLPortal
Please open Telegram to view this post
VIEW IN TELEGRAM
👍62🔥1
This media is not supported in your browser
VIEW IN TELEGRAM
Использование привязанных переменных — ключ к быстрой работе приложений

Пишите SQL вот так:

'SELECT ... WHERE col = ' || var


Каждое новое значение VAR создаёт новый запрос ⇒ много разборов ⇒ медленно

Используйте привязку вот так:

'SELECT ... WHERE col = :bind'


Один и тот же запрос для любого значения ⇒ один разбор ⇒ быстро

👉 @SQLPortal
Please open Telegram to view this post
VIEW IN TELEGRAM
👍4🔥31
Внутренняя архитектура PostgreSQL

1. Архитектура на основе процессов
PostgreSQL использует архитектуру «один процесс на соединение», то есть для каждого клиента создаётся отдельный процесс операционной системы.

2. Журнал предзаписи
PostgreSQL применяет WAL для обеспечения надёжности данных, согласованности, восстановления после сбоев и репликации

3. Многоверсионность и управление параллелизмом
Благодаря MVCC PostgreSQL позволяет выполнять параллельные транзакции без необходимости жёсткой блокировки данных

4. Конвейер выполнения запросов
Запросы в PostgreSQL проходят через чёткую последовательность этапов: разбор, планирование, исполнение и возврат результатов

5. Система индексации
PostgreSQL поддерживает множество типов индексов (B-Tree, GIN, GiST, BRIN и др.) для оптимизации запросов под разные типы данных

6. Партиционирование таблиц
PostgreSQL позволяет разбивать большие таблицы на более мелкие части (партиции) по диапазону значений, списку или хешу, что упрощает управление и ускоряет обработку.

7. Логическая декодировка
Позволяет транслировать изменения из WAL в логическом формате, что полезно для репликации и систем отслеживания изменений (CDC).

8. Расширения
PostgreSQL построен как модульная система и поддерживает расширения, которые позволяют добавлять новые функции и возможности.

9. Сбор статистики
Механизм сбора статистики PostgreSQL отслеживает активность в реальном времени, что помогает анализировать и оптимизировать производительность базы данных


👉 @SQLPortal
Please open Telegram to view this post
VIEW IN TELEGRAM
👍9🔥6
О векторных базах данных простым языком

📖 Читать: ссылка

👉 @SQLPortal | #cтатья
Please open Telegram to view this post
VIEW IN TELEGRAM
👍11🔥5
Когда ты пишешь SQL-запрос, порядок команд вроде бы логичен SELECT, FROM, WHERE и тд. Но база данных выполняет их в другом порядке 😄

Настоящая последовательность выполнения 👇

FROM
JOIN
ON
WHERE
GROUP BY
HAVING
SELECT
ORDER BY
LIMIT


💡 Поэтому WHERE не может использовать SUM() — он идёт до агрегации. А HAVING — можно

На фото слева. то в каком порядке мы обычно пишем SQL-запрос, а справа как реально работает база данных под капотом. Запомни эту логику, и ты избежишь кучи ошибок в SQL-запросах

👉 @SQLPortal
Please open Telegram to view this post
VIEW IN TELEGRAM
👍25🔥7🤯3👀1
Эта фишка спасёт, когда ты не понимаешь, куда делись строки

Если ты этого не знал — сохраняй

👉 @SQLPortal
Please open Telegram to view this post
VIEW IN TELEGRAM
👍173🔥2
Обязательно загляни на DB-Engines.com – это своего рода “топ-чарт” самых популярных СУБД в мире

Ежемесячный рейтинг, который показывает, насколько популярна каждая СУБД по таким параметрам, как: количество упоминаний в интернете, наличие вакансий с упоминанием СУБД, активность на Stack Overflow и тд.

На апрель 2025 в топе:

🍩Oracle
🍩MySQL
🍩Microsoft SQL Server

Этот рейтинг — не о том, какая СУБД «лучшая», а о том, какие технологии чаще используются, обсуждаются и востребованы на рынке

👉 @SQLPortal
Please open Telegram to view this post
VIEW IN TELEGRAM
👍112🔥1
Как оптимизировать большие таблицы в SQL

📖 Читать: ссылка

👉 @SQLPortal | #cтатья
Please open Telegram to view this post
VIEW IN TELEGRAM
👍74
Понимание типов баз данных

Чтобы принимать наилучшие решения для наших проектов, важно понимать различные типы баз данных, доступные на рынке. Необходимо учитывать ключевые характеристики каждого типа, популярные варианты, а также сравнивать их области применения 😁

👉 @SQLPortal
Please open Telegram to view this post
VIEW IN TELEGRAM
10👍2