Skip to content

Все, что вам нужно знать об индексе в SQL Server

Пересказ статьи Lorenzo Uriel. Everything you Need to Know About Index in SQL Server





Цель настоящей статьи - рассказать просто об индексах в SQL Server, объяснив фундаментальные понятия и предложив практические советы по обслуживанию.

Я обязуюсь обеспечить легкое и быстрое чтение, упрощающее понимание этого важного аспекта в области баз данных и управлении запросами.

Темы


  • Обзор индексов

  • Типы индексов в SQL Server
    • Кластеризованные индексы.

    • Некластеризованные индексы.

    • Поколоночный и построчный индексы.

  • Фрагментация индексов
    • Внутренняя и внешняя.

    • Перестройка и реорганизация.

Continue reading "Все, что вам нужно знать об индексе в SQL Server"

Принудительное использование планировщиком запросов Postgres правильного индекса с помощью OFFSET 0

Пересказ статьи Julien Van Beveren. Forcing the Postgres query planner into using the correct index using OFFSET 0


MySQL имеет возможность применять хинт USE INDEX для указания, какие индексы использовать при выполнении конкретного запроса. PostgreSQL не имеет такой особенности, полагая, что он лучше знает, когда и какие индексы использовать.

Перед выполнением запроса PostgreSQL строит "план". Это сложный процесс, который я хотел бы понимать досконально, но планировщик запросов главным образом смотрит на существующие индексы, распределение данных и фильтры запроса, чтобы найти различные способы вернуть затребованные вами данные. Затем он оценивает "стоимость" каждой операции и выполняет "самый дешевый" план. Это работает отлично до тех пор, пока не...
Continue reading "Принудительное использование планировщиком запросов Postgres правильного индекса с помощью OFFSET 0"

Вставка столбца в середину таблицы

Пересказ статьи Steve Jones. Friday Flyway Tips – Inserting Column in the Middle of a Table


Заказчик мне задал вопрос, может ли Flyway Desktop (FWD) вызвать проблемы, если разработчики добавили столбцы в середину таблицы. Это обоснованное беспокойство, и данная статья показывает, что FWD не вызывает проблем, даже если ваши разработчики глупят.

Если только они не захотят это сделать специально.

Я много работал с Flyway Desktop с тех пор, как мы перешли с устаревших плагинов для SSMS на автономный инструмент.

Сценарий


Представим, что у вас есть подобная таблица с несколькими столбцами.

CREATE TABLE Product
( ProductID INT NOT NULL CONSTRAINT ProductPK PRIMARY KEY
, ProductName VARCHAR(50)
, ProductDesc VARCHAR(1000)
, ProductSize CHAR(1)
, ProductWeight INT
, ProductColor VARCHAR(20)
, StatusID int
)
GO

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

Continue reading "Вставка столбца в середину таблицы"

Сравнение производительности TOP и MAX

Пересказ статьи Andy Brownsword. Comparing Performance of TOP vs. MAX


Как TOP(1), так и MAX могут использоваться для нахождения наибольшего значения в наборе данных. Хотя они приводят к одному и тому же результату, но делают это разными способами.

Для начала разберемся, в чем разница между ними?

Предложение TOP ограничивает число результатов, возвращаемых запросом; тут мы рассматриваем единственный результат. При использовании MAX, напротив, мы применяем функцию к нашим данным, чтобы выбрать из них максимальное значение.

Давайте перейдем к нескольким примерам с данными StackOverflow, а конкретно таблицы Votes.

Continue reading "Сравнение производительности TOP и MAX"

Преобразование Oracle PL/SQL в PostgreSQL PL/pgSQL

Пересказ статьи Bitnine Global. Converting Oracle PL/SQL to PostgreSQL PL/pgSQL


Добро пожаловать в мир программирования баз данных, в котором языки Oracle PL/SQL и PostgreSQL PL/pgSQL помогают привнести структуру и логику в данные. Эти процедурные языки являются основой внедрения бизнес-правил и манипуляции данными в сами базы данных, играя важную роль в администрировании баз данных.

Оба языка предоставляют возможность использовать переменные, операторы управления типа IF, CASE и LOOP, а также управлять исключениями - инструменты, необходимые для адаптивных и динамичных процедур работы с базами данных. Когда бы вы ни создавали новые функции или выполняли сложные процедуры, синтаксис CREATE PROCEDURE и CREATE FUNCTION станет частью вашего стандартного инструментария.

По мере того, как мы погружаемся в процесс преобразования из Oracle PL/SQL в PostgreSQL PL/pgSQL, мы будем открывать важные детали, необходимые для гладкого перехода.
Continue reading "Преобразование Oracle PL/SQL в PostgreSQL PL/pgSQL"

Краткое руководство по PostgreSQL CLI

Пересказ статьи Kasper Junge. A Brief Guide to the PostgreSQL CLI


Использование интерфейса командной строки PostgreSQL (CLI) в первую очередь включает взаимодействие с двумя главными утилитами: psql, интерактивный терминал для работы с PostgreSQL, и различные инструменты командной строки типа pg_dump для резервных копий базы данных. Вот руководство, с которого можно начать:

Начнем с psql


Доступ к CLI:


  • Откройте ваш интерфейс командной строки (терминал на Linux/macOS, командную строку или PowerShell на Windows

  • Наберите psql -U [имя пользователя] -d [база данных] для подключения к вашей базе данных PostgreSQL. Замените [имя пользователя] на имя реального пользователя PostgreSQL, а [база данных] - на имя базы данных.

  • Вам может потребоваться указать хост (-h [хост]) и порт (-p [порт]), если ваша база не находится на локальном севере и не использует порт по умолчанию.

Continue reading "Краткое руководство по PostgreSQL CLI"

Пошаговая инструкция восстановления базы данных PostgreSQL из файла дампа SQL

Пересказ статьи Victor Magallanes. A Step-by-Step Guide: Restoring a PostgreSQL Database from a Dump SQL File


PostgreSQL является мощной системой управления реляционными базами данных с открытыми кодами, широко используемой для хранения и управления данными в различных приложениях. Иногда вам необходимо восстановить базу данных PostgreSQL из файла дампа SQL в случаях повреждения в результате сбоя, переноса или тестирования. В этой статье мы представим полное руководство по восстановлению базы данных PostgreSQL из файла дампа SQL, описав необходимые шаги и лучшую практику.

Понятие файлов дампа базы данных


Прежде чем перейти к процессу восстановления, давайте разберемся с тем, что представляет собой файл дампа базы данных. Дамп базы данных - это файл, содержащий снимок схемы базы данных и данных на конкретный момент времени. Этот файл обычно генерируется утилитой pg_dump, входящей в пакет PostgreSQL, и содержит команды SQL для воссоздания структуры базы данных и вставки в нее данных.
Continue reading "Пошаговая инструкция восстановления базы данных PostgreSQL из файла дампа SQL"

Массовая вставка в PostgreSQL 14 с помощью postgres_fdw

Пересказ статьи Dileep kumar. Bulk Insert with postgres_fdw in PostgreSQL 14


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

Этот новый модуль подобен старому модулю dblink. Функционально postgres_fdw является обработчиком данных полей для удаленных таблиц в PostgreSQL, который делает это более прозрачно и в соответствии со стандартом.

Continue reading "Массовая вставка в PostgreSQL 14 с помощью postgres_fdw"

Исследование производительности: прямые SQL-запросы или ORM в Python

Пересказ статьи Exploring Performance: Raw SQL Queries vs. ORM in Python


В приложениях, управляемых данными, очень важна оптимизация производительности. Когда приходится взаимодействовать с данными, разработчики часто оказываются на распутье: следует ли им непосредственно использовать запросы SQL или выбрать фреймворк объектно-реляционного отображения (ORM)? Эта статья углубляется в эту дискуссию, выделяя преимущества и недостатки обоих подходов, сопровождая их реальными примерами кода Python для более глубокого понимания.

Понимание ландшафта


Прямые запросы SQL встраиваются непосредственно в ваш код для взаимодействия с данными. Они предоставляют разработчикам детальное управление структурой и выполнением запроса, что делает их привлекательными для сложных запросов. С другой стороны, фреймворки ORM типа SQLAlchemy абстрагируют взаимодействие с базой данных в объекты Python, снижая необходимость писать непосредственно на SQL, улучшая при этом читабельность кода.
Continue reading "Исследование производительности: прямые SQL-запросы или ORM в Python"

Антипаттерны SQL Server: характерные ошибки кода SQL

Пересказ статьи Rich Benner. SQL Server Antipatterns: Common Mistakes with SQL Code


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

Одной из потенциальных проблем здесь является нехватка времени для того, чтобы действительно глубоко вникать в каждый язык программирования, имеющийся в вашем арсенале. Что касается SQL Server, то язык, который там используется, весьма отличается от, скажем, C#. Эти языки основаны на обработке в итерационном процессе каждой строки отдельно в наборе данных. Это достаточно хорошо работает в подобных языках, но совершенно ужасно в SQL Server. Будучи языком, основанном на теории множеств, SQL Server предпочитает иметь дело сразу со всем множеством данных.
Continue reading "Антипаттерны SQL Server: характерные ошибки кода SQL"

Немного о тривиальных планах

Пересказ статьи Andy Brownsword. A Bit About Trivial Plans


Тривиальный план создается, когда у SQL Server нет никакого выбора по реализации. Вот пример из базы данных StackOverflow с удаленными индексами:



SELECT *
FROM dbo.Users
WHERE Id = 1234;

Здесь действительно нет никакого выбора помимо поиска в кластеризованном индексе. Это единственный индекс и это настолько же эффективно, насколько это возможно, учитывая, что мы фильтруем по ключу кластеризации для конкретного значения:



Continue reading "Немного о тривиальных планах"