Открытый канал ID 78606188243140

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

SQL, PostgreSql, Базы данных
В публикациях есть гайды, задачи, запросы и шпаргалки.

Каналов в рубрике
1 730
Место этого канала
№ 705
Открыть рубрику →

Публикации за период

По реакциям

Поиск и вся лента — после бесплатной регистрации. Свои даты — по подписке; владелец канала видит их бесплатно. Сортировка по реакциям — по подписке. Зарегистрироваться

Загрузка…

SQL Типы данных в БД. Влияние на производительность.

Основная ошибка при выборе типа данных — выбирать на всякий случай побольше

Примеры антипаттернов:
⛔VARCHAR(255) для всего подряд, даже если код строки состоит из 5 символов
⛔TEXT для email-адресов
⛔BEGINT для счетчика, где максимум 100 записей
⛔FLOAT для денег (потеря точности)

Как правильно
✅Размер строки выбирать под задачу
✅VARCHAR(50) - для email
✅CHAR(2) - для код страны
✅NUMERIC(10, 2) или DECIMAL - для денег
✅BOOLEAN - для булевых значений
✅DATE или TIMESTAMP - для даты

🔥При правильно подобранных типах меньше багов, больше свободного места и быстре выполняются запросы
Просмотры: 18
Перейти в пост Открыть в MAX Сообщить о неточности
Оператор between в SQL

Оператор BETWEEN в SQL проверяет, попадает ли значение столбца в указанный диапазон, причём обе границы включаются. Он делает код более читаемым, заменяя пару сравнений (>= и <=) одним удобным условием. 

Синтаксис:
WHERE col1 BETWEEN 5 AND 10

Это эквивалентно:
WHERE col1 >= 5 AND col1 <= 10

⚠Оператор BETWEEN является включающим, то есть включает граничные значения в результаты
Просмотры: 11
Перейти в пост Открыть в MAX Сообщить о неточности
ORDER BY
Оператор ORDER BY в SQL используется для сортировки строк в результате запроса и позволяет явно задать, как упорядочить данные.

⚠По умолчанию сортировка выполняется по возрастанию:

SELECT *
FROM table_name
ORDER BY column_name

Чтобы указать направление сортировки, добавьте ASC (по возрастанию) или DESC (по убыванию):

ORDER BY column_name DESC
ORDER BY column_name ASC

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

SELECT *
FROM competition
ORDER BY age DESC, speed DESC
Просмотры: 18
Перейти в пост Открыть в MAX Сообщить о неточности
Советы по проектированию БД
Проектирование SQL-базы данных — это баланс между нормализацией (для минимизации избыточности) и практичностью (для скорости чтения). 

Концептуальная модель
Прежде чем писать SQL, нарисуйте ERD (диаграмму «сущность-связь»). Это помогает наглядно увидеть связи между данными, обсудить требования с командой или заказчиком и избежать ошибок на раннем этапе. 

Принцип нормализации
Разделяйте данные на логические сущности (например, отдельно «Пользователи», «Товары», «Заказы») и избегайте дублирования информации. Это снижает избыточность, упрощает обновления и уменьшает риск ошибок.

Используйте первичные и внешние ключи
Первичный ключ однозначно идентифицирует запись в таблице. Внешние ключи устанавливают связи между таблицами, обеспечивая целостность данных. Не пренебрегайте опциями ON DELETE и ON UPDATE (например, CASCADE, SET NULL) — они определяют, что произойдёт с зависимыми записями при изменении или удалении родительской. 

Используйте подходящие типы данных
Выбирайте типы данных осознанно. Не используйте NVARCHAR(MAX) или TEXT без крайней необходимости — это может занимать больше места и замедлять операции. Для числовых значений используйте DECIMAL или INT, для дат — DATE. Для уникальных идентификаторов (например, в связке с внешними ключами) часто удобны суррогатные ключи (INT IDENTITY), а не составные. 

Оптимизируйте индексы
Индексы ускоряют выполнение запросов, но их нужно применять разумно. Создавайте индексы на столбцах, которые часто используются в условиях WHERE, при сортировках или в предложениях JOIN. Однако не переусердствуйте: каждый индекс замедляет операции вставки и обновления. Избегайте индексации столбцов с очень малым количеством уникальных значений (например, «Пол»).

Применяйте ограничения для качества данных
Используйте NOT NULL для полей, которые обязаны иметь значение. Для проверки допустимости значений (например, чтобы цена была положительной) применяйте CHECK. Это встроенная защита от некорректных данных. 

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

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

Специфика проекта
Не существует универсального рецепта — оптимальная структура зависит от требований, объёма данных и нагрузки. Например, для аналитической базы данных (OLAP) денормализация может быть оправдана, но для оперативной обработки транзакций (OLTP) она часто снижает производительность. 

Тестирование
После проектирования создайте тестовые данные и проверьте, как работают связи и индексы. Если обнаружатся узкие места (медленные запросы, избыточное использование индексов), вносите изменения и повторяйте процесс.
Просмотры: 16
Перейти в пост Открыть в MAX Сообщить о неточности
SET NOCOUNT ON — это директива в Transact-SQL (для SQL Server), которая отключает автоматическую отправку серверных сообщений о количестве затронутых строк. По умолчанию SQL Server после выполнения инструкции (INSERT, UPDATE, DELETE, SELECT) возвращает клиенту сообщение вида «(5 rows affected)». Это удобно при отладке, но в продакшене такие «фоновые» уведомления создают лишний сетевой трафик и могут вызывать проблемы с некоторыми клиентскими приложениями или ORM-инструментами. 

Как это работает
Когда вы пишете SET NOCOUNT ON, SQL Server перестаёт генерировать и отправлять эти сообщения. При этом сам запрос выполняется как обычно — данные обновляются, вставляются или удаляются, меняется только обратная связь с клиентом.

Важный нюанс
Функция @@ROWCOUNT всё равно обновляется даже при SET NOCOUNT ON. Если вам нужно программно узнать, сколько строк затронула конкретная инструкция внутри процедуры, вы можете смело использовать @@ROWCOUNT. 

Для чего это нужно
Основная польза — в снижении сетевого трафика. В хранимых процедурах, особенно тех, что содержат циклы или несколько инструкций, отправка множества таких сообщений может заметно замедлять работу из-за накладных расходов на передачу данных. Подавляя их, вы уменьшаете объём передаваемой информации, что положительно сказывается на производительности. 

Ещё один сценарий — работа с клиентскими приложениями, которые парсят эти сообщения. Иногда фреймворки ожидают определённый формат и могут выдать ошибку, если в потоке появляются неожиданные результирующие наборы. SET NOCOUNT ON помогает избежать такх конфликтов.

Как применять
Обычно эту директиву ставят в самом начале хранимой процедуры или триггера, сразу после объявления параметров. Часто рекомендуют также вернуть настройку в исходное состояние (SET NOCOUNT OFF) перед тем, как процедура начнёт возвращать результирующие наборы (например, через SELECT).

Пример:
CREATE PROCEDURE UpdateUserBalance @UserID INT, @Amount DECIMAL(18,2) AS
BEGIN
SET NOCOUNT ON;
UPDATE Users SET Balance = Balance + @Amount WHERE UserID = @UserID;
SET NOCOUNT OFF;
END
Просмотры: 12
Перейти в пост Открыть в MAX Сообщить о неточности
COUNT в SQL — это инструмент для подсчёта количества строк или уникальных значений в столбце. Она относится к агрегатным функциям, то есть обрабатывает набор данных и возвращает одно итоговое число. 

Варианты использования:

COUNT(*) — подсчитывает все строки в таблице, включая те, где есть значения NULL. Это самый надёжный способ узнать общее физическое количество записей.

COUNT(column_name) — считает только те строки, где значение в указанном столбце **не равно NULL. Строки с NULL` в этом столбце игнорируются.

COUNT(DISTINCT column_name) — возвращает количество уникальных значений в указанном столбце, при этом значения NULL не учитываются.

Примеры запросов:

SELECT COUNT(*) FROM employees;
(Общее число записей в таблице)

SELECT COUNT(*) FROM employees WHERE department_id = 10;
(Количество сотрудников с id=10)

SELECT COUNT(phone_number) FROM employees;
(Количество сотрудников у которых указан номер телефона)

SELECT COUNT(DISTINCT department_id) FROM departments;
(Количество уникальных отделов в таблице)
Просмотры: 15
Перейти в пост Открыть в MAX Сообщить о неточности
Рой ИИ-агентов написал аналог SQLite на Rust за несколько часов

Cursor провела необычный эксперимент: агентам выдали только официальную документацию SQLite объёмом 835 страниц и поручили с нуля реализовать собственный движок базы данных на Rust.

Без интернета, готового исходного кода и дополнительной помощи.

Уже через четыре часа получившиеся реализации правильно выполняли 73–85% запросов из скрытого теста. После дальнейшей работы некоторым командам удалось довести результат до 100%.

Но особенно удивила стоимость:

- связка Opus 4.8 и Composer 2.5 потратила около $1 400;
- Fable — примерно $20 000.

Одинаковая задача, но почти пятнадцатикратная разница в цене.

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

Получается, ИИ уже способен за часы собрать сложный системный проект.

#ai #rust #sqlite #agents
Просмотры: 14
Перейти в пост Открыть в MAX Сообщить о неточности
Функция ROUND()

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

Синтаксис
ROUND(Number, n)
Number - Число или колонка, которую хотите округлить
n - Количество знаков после запятой для округления

Пример базового округления целых чисел:

SELECT ROUND(5.8, 0)
Возвращает 6.0

SELECT ROUND(3.3, 0)
Возвращает 3.0

SELECT ROUND(10.5, 0)
Возвращает - 11.0

Округление до определенного количества знаков после запяттой:

SELECT ROUND(5.14159, 2)
Возвращает 5.14000

❗Если цифра после последнего сохраненного десятичного разряда равна 5 или больше, последний сохраненный разряд округляется вверх
Просмотры: 14
Перейти в пост Открыть в MAX Сообщить о неточности
Вся лента — после бесплатной регистрации
ВКонтакте Телеграм Одноклассники
Избранное в datool.ru

Следите за каналом в личном кабинете

Зарегистрируйтесь в datool.ru, чтобы добавить канал «SQL и БД | Базы данных» в избранное и отслеживать его показатели.

Зарегистрироваться
Для владельцев каналов

Подтвердите свой канал

Войдите или зарегистрируйтесь в datool.ru, затем добавьте нашего бота в канал по инструкции в личном кабинете. После проверки владения замок исчезнет и вам станет доступно управление каналом.

Войти или зарегистрироваться

Сообщить о неточности

Опишите, что нужно исправить. Если есть источник, добавьте ссылку.

Вы покидаете datool.ru

Ссылка ведёт на внешний сайт. datool.ru не отвечает за его содержимое — проверьте адрес, прежде чем вводить пароли или платёжные данные.

Переход через 10 с

Перейти