💡 SQL-трюк: сравнивайте `NULL` без костылей
В PostgreSQL обычное сравнение может неожиданно сломать условие:
Результат:
Потому что
Из-за этого часто пишут громоздкие условия:
Но есть оператор, о котором многие забывают:
Он работает как NULL-safe equality:
Есть и обратный вариант:
Например, удобно искать реально изменившиеся значения:
Если оба
Без этого обычное:
может просто вернуть
Особенно полезно при синхронизации данных, аудите изменений, ETL и UPSERT-логике.
#SQL #PostgreSQL #Database
В PostgreSQL обычное сравнение может неожиданно сломать условие:
SELECT NULL = NULL;
Результат:
NULL
Потому что
NULL означает «неизвестное значение», а не конкретное значение.Из-за этого часто пишут громоздкие условия:
WHERE a = b
OR (a IS NULL AND b IS NULL)
Но есть оператор, о котором многие забывают:
a IS NOT DISTINCT FROM b
Он работает как NULL-safe equality:
SELECT NULL IS NOT DISTINCT FROM NULL; -- true
SELECT 10 IS NOT DISTINCT FROM 10; -- true
SELECT 10 IS NOT DISTINCT FROM NULL; -- false
Есть и обратный вариант:
a IS DISTINCT FROM b
Например, удобно искать реально изменившиеся значения:
SELECT *
FROM old_data o
JOIN new_data n USING (id)
WHERE o.email IS DISTINCT FROM n.email;
Если оба
email = NULL, строка не считается изменённой.Без этого обычное:
o.email <> n.email
может просто вернуть
NULL и пропустить изменение.Особенно полезно при синхронизации данных, аудите изменений, ETL и UPSERT-логике.
#SQL #PostgreSQL #Database
🔥9👍8❤7
🚀 ИИ-агент ускорил SQLite до 59% меньше чем за 8 часов
Ускорить SQLite хотя бы на 5% уже было бы серьёзным результатом. Это один из самых зрелых и оптимизированных проектов в мире - его команда почти 20 лет выжимает из кода каждую долю производительности.
Но AI-агент KISS Sorcar менее чем за 8 часов и с затратами меньше $150 добился заметного ускорения сразу в нескольких типах нагрузки.
Результаты:
- 2,06× быстрее в официальном
- 1,90× в TATP — транзакционная OLTP-нагрузка
- 1,30× в Star Schema Benchmark — аналитические запросы
- 1,25× в
Агент нашёл места, где стандартная конфигурация SQLite несла лишние расходы — особенно при записи транзакций на диск.
После этого он:
- изменил код и настройки
- прогнал бенчмарки
- проверил свои же изменения на ошибки
- сохранил совместимость с существующими тестами
Более миллиона тестов SQLite продолжают проходить.
анализ зрелой кодовой базы → поиск узких мест → изменение реализации → бенчмарки → проверка собственных решений.
GitHub:
https://github.com/ksenxx/sqlite-optimized/
Blog: https://kisssorcar.github.io/blog/sqlite-optimization-blog.html
#AI #SQLite #Programming #CodingAgents #Performance #OpenSource
Ускорить SQLite хотя бы на 5% уже было бы серьёзным результатом. Это один из самых зрелых и оптимизированных проектов в мире - его команда почти 20 лет выжимает из кода каждую долю производительности.
Но AI-агент KISS Sorcar менее чем за 8 часов и с затратами меньше $150 добился заметного ускорения сразу в нескольких типах нагрузки.
Результаты:
- 2,06× быстрее в официальном
speedtest1 (~30 тыс. операций)- 1,90× в TATP — транзакционная OLTP-нагрузка
- 1,30× в Star Schema Benchmark — аналитические запросы
- 1,25× в
kvtest — работа с BLOB и дисковым I/OАгент нашёл места, где стандартная конфигурация SQLite несла лишние расходы — особенно при записи транзакций на диск.
После этого он:
- изменил код и настройки
- прогнал бенчмарки
- проверил свои же изменения на ошибки
- сохранил совместимость с существующими тестами
Более миллиона тестов SQLite продолжают проходить.
анализ зрелой кодовой базы → поиск узких мест → изменение реализации → бенчмарки → проверка собственных решений.
GitHub:
https://github.com/ksenxx/sqlite-optimized/
Blog: https://kisssorcar.github.io/blog/sqlite-optimization-blog.html
#AI #SQLite #Programming #CodingAgents #Performance #OpenSource
👍11❤4🔥4👎1👏1
⚡️ SQL-приём: `GROUPING SETS` может заменить несколько тяжёлых `GROUP BY` + `UNION ALL`.
Допустим, нужно одновременно получить статистику:
- по стране и городу;
- только по стране;
- общий итог.
Часто пишут так:
Но SQL умеет это нативно:
() означает grand total.
А если нужно понять, настоящий ли NULL лежит в данных или это строка итогов:
вернут 1 для колонок, которые были свернуты агрегированием.
🔥 Особенно полезно для:
OLAP-запросов;
аналитических отчётов;
дашбордов;
многоуровневых итогов;
запросов, где иначе появляется несколько почти одинаковых GROUP BY.
Ещё есть:
ROLLUP строит иерархические итоги, а CUBE - все комбинации измерений.
Если в аналитическом SQL у вас появляется цепочка из GROUP BY + UNION ALL, возможно, вы просто забыли про GROUPING SETS.
#SQL #PostgreSQL #DataEngineering #Analytics
Допустим, нужно одновременно получить статистику:
- по стране и городу;
- только по стране;
- общий итог.
Часто пишут так:
SELECT country, city, SUM(revenue)
FROM sales
GROUP BY country, city
UNION ALL
SELECT country, NULL, SUM(revenue)
FROM sales
GROUP BY country
UNION ALL
SELECT NULL, NULL, SUM(revenue)
FROM sales;
Но SQL умеет это нативно:
SELECT
country,
city,
SUM(revenue) AS revenue
FROM sales
GROUP BY GROUPING SETS (
(country, city),
(country),
()
);
() означает grand total.
А если нужно понять, настоящий ли NULL лежит в данных или это строка итогов:
GROUPING(country)
GROUPING(city)
вернут 1 для колонок, которые были свернуты агрегированием.
🔥 Особенно полезно для:
OLAP-запросов;
аналитических отчётов;
дашбордов;
многоуровневых итогов;
запросов, где иначе появляется несколько почти одинаковых GROUP BY.
Ещё есть:
ROLLUP(...)
CUBE(...)
ROLLUP строит иерархические итоги, а CUBE - все комбинации измерений.
Если в аналитическом SQL у вас появляется цепочка из GROUP BY + UNION ALL, возможно, вы просто забыли про GROUPING SETS.
#SQL #PostgreSQL #DataEngineering #Analytics
❤9👍6🔥6🤔1😱1
⚡ В SQLite есть кусок кода, который выглядит «грязно», но оставлен таким специально ради скорости.
Каждый SQL-запрос SQLite сначала компилируется в байткод, а затем выполняется собственной виртуальной машиной VDBE.
Внутри — большой цикл диспетчеризации с почти 200 opcode.
И вот интересный момент: SQLite использует обычные
В исходниках прямо написано:
«Код использует неструктурированные goto и выглядит не очень чисто. Но это сделано не из-за плохого стиля, так быстрее».
По замерам разработчиков, такой подход ускоряет
То есть здесь читаемость сознательно пожертвовали ради производительности.
Хорошее напоминание: в системном коде «красивее» не всегда значит «быстрее».
#SQLite #C #Databases #Performance #SystemsProgramming
Каждый SQL-запрос SQLite сначала компилируется в байткод, а затем выполняется собственной виртуальной машиной VDBE.
Внутри — большой цикл диспетчеризации с почти 200 opcode.
И вот интересный момент: SQLite использует обычные
goto, чтобы быстро прыгать между общими ветками выполнения.В исходниках прямо написано:
«Код использует неструктурированные goto и выглядит не очень чисто. Но это сделано не из-за плохого стиля, так быстрее».
По замерам разработчиков, такой подход ускоряет
sqlite3_step() примерно на 1,5%.То есть здесь читаемость сознательно пожертвовали ради производительности.
Хорошее напоминание: в системном коде «красивее» не всегда значит «быстрее».
#SQLite #C #Databases #Performance #SystemsProgramming
🔥6❤4🥰2
This media is not supported in your browser
VIEW IN TELEGRAM
Как SQLite выжимает скорость: байткод, VM и goto
Некрасивый код, который делает SQLite быстрым
Некрасивый код, который делает SQLite быстрым
👎5❤3👍3🔥3🤯1
🔥 PPT Master делает презентации из PDF, DOCX и сайтов прямо внутри Claude Code и Cursor. И на выходе это настоящий редактируемый PowerPoint
ppt-master работает как skill для AI-IDE. Можно просто написать: «сделай презентацию из этого PDF», после чего агент сам разбирает материал, продумывает структуру, собирает дизайн и экспортирует .pptx. Поддерживаются PDF, DOCX, URL и Markdown.
Самая сильная часть проекта в том, что слайды не превращаются в набор картинок. Текст, фигуры, таблицы и графики экспортируются как нативные объекты PowerPoint, которые можно открыть и вручную отредактировать. Есть шаблоны, live preview, анимации, speaker notes и даже генерация озвучки с последующим встраиванием аудио в PPTX.
Работает с Claude Code, Cursor, VS Code + Copilot и другими agent harness. Сам пайплайн выполняется локально, кроме обращений к выбранной AI-модели.
По сути:
PDF / DOCX / URL → AI-agent → структура → дизайн → настоящий editable .pptx
Автор отдельно пишет, что цель не заменить финальную ручную полировку, а убрать примерно 90% работы с пустого листа.
🔗 github.com/hugohe3/ppt-master
#AI #ClaudeCode #PowerPoint #Agents #OpenSource
ppt-master работает как skill для AI-IDE. Можно просто написать: «сделай презентацию из этого PDF», после чего агент сам разбирает материал, продумывает структуру, собирает дизайн и экспортирует .pptx. Поддерживаются PDF, DOCX, URL и Markdown.
Самая сильная часть проекта в том, что слайды не превращаются в набор картинок. Текст, фигуры, таблицы и графики экспортируются как нативные объекты PowerPoint, которые можно открыть и вручную отредактировать. Есть шаблоны, live preview, анимации, speaker notes и даже генерация озвучки с последующим встраиванием аудио в PPTX.
Работает с Claude Code, Cursor, VS Code + Copilot и другими agent harness. Сам пайплайн выполняется локально, кроме обращений к выбранной AI-модели.
По сути:
PDF / DOCX / URL → AI-agent → структура → дизайн → настоящий editable .pptx
Автор отдельно пишет, что цель не заменить финальную ручную полировку, а убрать примерно 90% работы с пустого листа.
🔗 github.com/hugohe3/ppt-master
#AI #ClaudeCode #PowerPoint #Agents #OpenSource
👍4❤3🔥3