Рубрика «Оптимизация»

Вопросы, связанные с оптимизацией запросов.

Как думать подобно SQL Server: включенные столбцы не бесплатны

Пересказ статьи Brent Ozar. How to Think Like the SQL Server Engine: Included Columns Aren’t Free. В нашей последней статье я говорил, что если мы выполним запрос: UPDATE dbo.Users SET Age = Age + 1 WHERE Id = 643; при наличии индекса: CREATE INDEX IX_LastAccessDate_Id_DisplayName_Age ON dbo.Users(LastAccessDate, Id, DisplayName, Age); то должны были проделать следующее: …

Как думать подобно SQL Server: делать столбцы ключевыми или включенными в индекс?

Пересказ статьи Brent Ozar. How to Think Like the SQL Server Engine: Should Columns Go In the Key or the Includes? В последней статье я предлагал вам создать любой из двух следующих индексов:

Как думать подобно SQL Server: создание более широких индексов для борьбы с плохим T-SQL

Пересказ статьи Brent Ozar. How to Think Like the SQL Server Engine: Building Wider Indexes to Deal with Bad T-SQL В последней статье мы столкнулись с проблемой при выполнении этих двух запросов: SELECT LastAccessDate, Id, DisplayName, Age FROM dbo.Users WHERE LastAccessDate BETWEEN ‘2018-08-31’ AND ‘2018-09-01’ ORDER BY LastAccessDate;   SELECT LastAccessDate, Id, DisplayName, Age FROM …

Как думать подобно SQL Server: когда статистика не помогает

Пересказ статьи Brent Ozar. How to Think Like the SQL Server Engine: When Statistics Don’t Help В предыдущей статье мы видели, как SQL Server оценивает число строк, используя статистику. Давайте напишем две слегка отличающихся версии нашего запроса — на этот раз для поиска пользователей за один день — и посмотрим, какие будут даны оценки:

Как думать подобно SQL Server: использование статистики для построения планов запроса

Пересказ статьи Brent Ozar. How to Think Like the SQL Server Engine: Using Statistics to Build Query Plans В последнем случае SQL Server выбирал между поиском по индексу и сканированием таблицы, балансируя вокруг точки перехода, чтобы выяснить, какой из вариантов будет более эффективным для выполнения запроса.

Как думать подобно SQL Server: что такое точка перехода?

Пересказ статьи Brent Ozar. How to Think Like the SQL Server Engine: What’s the Tipping Point? В последней статье я добавил в наш запрос DisplayName и Age — два столбца, которых не было в нашем некластеризованном индексе: SELECT LastAccessDate, Id, DisplayName, Age FROM dbo.Users WHERE LastAccessDate > ‘2018-09-02 04:00’ ORDER BY LastAccessDate; В результате я …

Как думать подобно SQL Server: что такое поиск ключа?

Пересказ статьи Brent Ozar. How to Think Like the SQL Server Engine: What’s a Key Lookup? В паре наших последних статей мы использовали простой запрос для нахождения ИД тех, кто входил в систему с середины 2014 года: SELECT Id FROM dbo.Users WHERE LastAccessDate > ‘2014-07-01’ ORDER BY LastAccessDate; Но один лишь ИД не очень полезен. …

Как думать подобно SQL Server: Значит поиск по индексам это здорово, так?

Пересказ статьи Brent Ozar. How to Think Like the SQL Server Engine: So Index Seeks are Great, Right? В нашем последнем материале мы добавили некластеризованный индекс, и теперь, хотя этот запрос имеет фильтр и предложение ORDER BY, это не вызвало почти никакой работы — просто легкий поиск по индексу: Ах, поиск по индексу — ничего …

Как думать подобно SQL Server: добавление некластеризованного индекса

Пересказ статьи Brent Ozar. How to Think Like the SQL Server Engine: Adding a Nonclustered Index Прочитав последнюю статью, наши пользователи продолжали выполнять этот запрос и хотели бы его ускорить: SELECT Id FROM dbo.Users WHERE LastAccessDate > ‘2014/07/01’ ORDER BY LastAccessDate; Давайте подготовим данные, создав копию таблицы, отсортированную так, чтобы мы могли быстро найти требуемые …

Как думать подобно SQL Server: повторяющиеся запуски запроса

Пересказ статьи Brent Ozar. How to Think Like the SQL Server Engine: Running a Query Repeatedly Ранее в этой серии мы запускали запрос с ORDER BY, и обнаружили, что это интенсивно нагружает процессор, что утраивает стоимость запроса: