Статей о работе с PostgreSQL и её преимуществах достаточно много, но не всегда из них понятно, как следить за состоянием базы и метриками, влияющими на её оптимальную работу. В статье подробно рассмотрим SQL-запросы, которые помогут вам отслеживать эти показатели и просто могут быть полезны как пользователю.
Рубрика «sql tips and tricks»
Топ полезных SQL-запросов для PostgreSQL
2022-10-30 в 15:08, admin, рубрики: administration, database development, database optimization, postgresql, sql, sql tips and tricks, Администрирование баз данных, базы данныхSQL HowTo: разные варианты работы с EAV
2022-03-29 в 7:50, admin, рубрики: eav, ERP-системы, explain.tensor.ru, group by, include, intersect, join, postgresql, sql, sql tips and tricks, Администрирование баз данных, Блог компании ТензорСоблазн использовать модель EAV (Entity-Attribute-Value) при организации структуры БД весьма велик, особенно когда предметная область заранее плохо известна (или разработчик просто не хочет в нее углубляться). Это ведь так удобно - создать "универсальный" способ описания характеристик объектов, который больше не потребует доработок базы ни при появлении новых типов объектов, ни при возникновении новых атрибутов...
Однако, за любую универсальность приходится платить сложностью и производительностью запросов - так что Читать полностью »
SQL HowTo: «простое» прогнозирование
2022-02-11 в 12:00, admin, рубрики: ERP-системы, postgresql, sql, sql tips and tricks, Блог компании Тензор, ненормальное программированиеВ "Тензоре" мы разрабатываем множество сервисов для управления бизнесом. А в бизнесе очень часто возникает желание немного "заглянуть в будущее"Читать полностью »
SQL HowTo: генерируем лабиринты (алгоритм Прима и геометрические типы)
2021-11-22 в 5:40, admin, рубрики: postgresql, sql, sql tips and tricks, алгоритм Прима, Алгоритмы, Блог компании Тензор, Занимательные задачки, лабиринтостроительствоSQL является мощным инструментом для обработки множеств, а функционал PostgreSQL позволяет делать многие вещи еще проще, поэтому идеально подходит для реализации некоторых алгоритмов на графах.
Как прикрутить SQL к чему угодно при помощи Apache Calcite
2021-09-17 в 7:17, admin, рубрики: Apache, Apache Calcite, Apache Ignite, sql, sql tips and tricks, базы данных, Блог компании Конференции Олега Бунина (Онтико), высокая производительность, конференции, распределенные системы, распределенные файловые системыСделать свою собственную SQL-базу данных или запускать SQL-запросы в NoSQL-базе данных — кажется, это очень непростая задача. А если мы говорим о распределенной БД, то сложность возрастает многократно. Но, к счастью, Apache Calcite — фреймворк с открытым кодом — поможет сделать это довольно легко.
SQL HowTo: решаем головоломку «Небоскрёбы» почти без перебора
2021-04-20 в 10:15, admin, рубрики: grouping sets, json, lateral, postgresql, sql, sql tips and tricks, Блог компании Тензор, Занимательные задачки, небоскребы, ненормальное программирование, рекурсияМногие знают правила этой головоломки (Skyscrapers):
Перед вами вид сверху на городской квартал. В каждой клетке стоит "небоскреб" высотой, равной числу в этой клетке. Числа с боков сетки означают количество "небоскребов", видимых из соответствующей строки или столбца, если смотреть от этого числа.
PostgreSQL Antipatterns: убираем медленные и ненужные сортировки
2020-10-07 в 16:00, admin, рубрики: distinct, postgresql, sql, sql tips and tricks, union, Администрирование баз данных, Блог компании Тензор, высокая производительность, сортировка«Просто так» результат SQL-запроса возвращает записи в том порядке, который наиболее удобен серверу СУБД. Но человек гораздо лучше воспринимает хоть как-то упорядоченные данные — это помогает быстро сравнивать соответствие различных датасетов.
Поэтому со временем у разработчика может выработаться рефлекс «Дай-ка я на всякий случай это вот отсортирую!» Конечно, иногда подобная сортировка бывает оправдана прикладными задачами, но обычно такой случай выглядит как в старом анекдоте:
Программист ставит себе на тумбочку перед сном два стакана. Один с водой — на случай, если захочет ночью пить. А второй пустой — на случай, если не захочет.
Давайте разбираться — когда сортировка в запросе точно не нужна и несет с собой потерю производительности, когда от нее можно относительно дешево избавиться, а когда сделать из нескольких — одну.
PostgreSQL 13: happy pagination WITH TIES
2020-09-23 в 7:25, admin, рубрики: postgresql, postgresql 13, sql, sql tips and tricks, with ties, Администрирование баз данных, Блог компании Тензор, высокая производительностьНа прошедшей неделе вышло сразу две статьи (от Hubert 'depesz' Lubaczewski и автора самого патча Alvaro Herrera), посвященные реализованной в грядущей версии PostgreSQL 13 поддержке опции WITH TIES
из стандарта SQL:2008:
OFFSET start { ROW | ROWS }
FETCH { FIRST | NEXT } [ count ] { ROW | ROWS } { ONLY | WITH TIES }
Что это, и как оно избавляет от проблем с реализацией пейджинга, о которых я рассказывал в статье «PostgreSQL Antipatterns: навигация по реестру»?
SQL HowTo: курсорный пейджинг с неподходящей сортировкой
2020-09-05 в 17:45, admin, рубрики: limit, postgresql, sql, sql tips and tricks, union, Алгоритмы, Блог компании Тензор, ненормальное программированиеЭтот пост родился как расширенный ответ на умозрительную задачу, обозначенную в статье «Хроники пэйджинга».
Пусть у нас есть реестр документов, с которым работают операторы или бухгалтеры в СБИС, вроде такого:
Традиционно, при подобном отображении используется или прямая (новые снизу) или обратная (новые сверху) сортировка по дате и порядковому идентификатору, назначаемому при создании документа — ORDER BY dt, id
или ORDER BY dt DESC, id DESC
.
Типичные возникающие при этом проблемы я уже рассматривал в статье «PostgreSQL Antipatterns: навигация по реестру». Но что если пользователю зачем-то захотелось «нетипичного» — например, отсортировать одно поле «так», а другое «этак» — ORDER BY dt, id DESC
? Но второй индекс мы создавать не хотим — ведь это замедление вставки и лишний объем в базе.
Можно ли решить эту задачу, эффективно используя только индекс (dt, id)
?
Читать полностью »
PostgreSQL Antipatterns: вычисление условий в SQL
2020-03-31 в 6:45, admin, рубрики: dba, postgresql, sql, sql antipatterns, sql tips and tricks, Администрирование баз данных, базы данных, Блог компании ТензорSQL — это не C++, и не JavaScript. Поэтому вычисление логических выражений происходит иначе, и вот это — совсем не одно и то же:
WHERE fncondX() AND fncondY()
= fncondX() && fncondY()
В процессе оптимизации плана исполнения запроса PostgreSQL может произвольным образом «переставлять» эквивалентные условия, не вычислять какие-то из них для отдельных записей, относить к условию применяемого индекса… Короче, проще всего считать, что вы заранее не можете управлять тем, в каком порядке будут (и будут ли вообще) вычисляться равноправные условия.
Поэтому если управлять приоритетом все-таки хочется, надо структурно сделать эти условия неравными с помощью условных выражений и операторов.
Данные и работа с ними — основа нашего комплекса СБИС, поэтому нам очень важно, чтобы операции над ними выполнялись не только корректно, но и эффективно. Давайте посмотрим на конкретных примерах, где могут быть допущены ошибки вычисления выражений, а где стоит улучшить их эффективность.
Читать полностью »