Запитання з тегом «optimization»

У контексті бази даних оптимізація означає процес оптимізатора запитів, що вибирає ефективний план фізичного виконання.

1
Які правила визначають, коли SQL Server використовує CTE як "огородження для оптимізації"?
Нещодавно Брент Озар опублікував публікацію, в якій детально описував деякі відмінності між SQL Server і PostgreSQL: Дві важливі відмінності між SQL Server і PostgreSQL Перший момент ("CTE - це огорожі для оптимізації") привернув мене до уваги, тому що очевидно, що в наведеному прикладі SQL Server поєднує CTE та основний запит …

2
Чому це швидше і чи безпечно його використовувати? (ДЕ перша буква в алфавіті)
Якщо коротко розповісти, ми оновлюємо невеликі таблиці людей із цінностями з дуже великої таблиці людей. В останньому тесті на це оновлення потрібно близько 5 хвилин. Ми натрапили на те, що, здається, найбільш глупа оптимізація, яка, здавалося б, прекрасно працює! Цей же запит зараз працює менше ніж за 2 хвилини і …

2
Розрахунок кількості запасів на основі журналу змін
Уявіть, що у вас є така структура таблиці: LogId | ProductId | FromPositionId | ToPositionId | Date | Quantity ----------------------------------------------------------------------------------- 1 | 123 | 0 | 10002 | 2018-01-01 08:10:22 | 5 2 | 123 | 0 | 10003 | 2018-01-03 15:15:10 | 9 3 | 123 | 10002 | …

1
Чи B-Tree повторно врівноважується під час видалення даних із таблиці SQL Server із кластерним індексом?
У мене є таблиця в базі даних SQL Server з кластерним індексом на первинному ключі. У таблиці 1 мільйон рядків. Якщо я видаляю 10K рядків з таблиці, чи індексується реструктуризація під час операції видалення? Операція видалення є частиною збереженої процедури. За один раз, більше ніж один клієнт може виконати збережену …

2
Як визначити вартість / вигоду додавання індексу?
За словами Крейга Рінгера : Хоча, як правило, добре створити індекс на (або включати) стовпці сторонніх ключів на стороні референції, це не потрібно. Кожен доданий вами індекс трохи уповільнює операції DML, тому ви платите за ефективність кожного INSERT, UPDATEабо DELETE. Якщо індекс використовується рідко, можливо, його не варто мати. Як …

1
Як я "натякаю" на кардинальність рекурсивного CTE?
Я використовую наступні рекурсивні CTE як мінімальний приклад, але в цілому оптимізатор повинен використовувати "здогадані" кардинальності для рекурсивних CTE: with recursive w(n) as ( select 1 union all select n+1 from w where n<5 ) select * from w; /* n --- 1 2 3 4 5 */ explain analyze …

1
Перетворення типу в виразі може вплинути на "CardinalityEstimate" у виборі плану запитів?
Я підтримую архівну базу даних, яка зберігає історичні дані у розділених поданнях. Стовпець розділення - це час дати. Кожна таблиця під представленням зберігає один місяць даних. Ми обмежуємо події в кожній таблиці з обмеженням чека на стовпчик дати. Це дозволяє оптимізатору обмежувати таблиці, які шукаються за запитами, які фільтруються в …

3
Як зберігається запис кожної зміни рядка в базі даних?
У проекті, над яким я працюю, кожна зміна рядків у деяких таблицях бази даних повинна відслідковуватися для подальшого аудиту чи відката. Потрібно легко знайти, хто змінив рядок, з якої IP-адреси та коли, і зможе відновити попередню версію. Аналогічну річ використовує, наприклад, Stack Exchange. Коли я змінюю чуже запитання, можна виявити, …

2
Чи оптимізує PostgreSQL додавання стовпців із ненульовими ЗАМЕЧЕННЯми?
Додаючи NOT NULLстовпці зі DEFAULTзначенням - чи оптимізує PostgreSQL цю операцію? У випадку, якщо таблиця має n рядків, неоптимізований стовпець alter-table-add дасть n записів за замовчуванням - що, очевидно, може бути дуже болісним. З оптимізацією БД миттєво створить новий стовпець, збереже лише одну копію значення за замовчуванням, яке буде повернуто, …

3
Самостійне приєднання на первинному ключі
Розглянемо цей запит, який складається з Nсамостійних приєднань: select t1.* from [Table] as t1 join [Table] as t2 on t1.Id = t2.Id -- ... join [Table] as tN on t1.Id = tN.Id Він виробляє план виконання з N кластеризованими скануванням індексів та об'єднанням N-1 об'єднання. Чесно кажучи, я не бачу …

1
Зберігається обчислена колонка, що викликає сканування
Перетворення звичайного стовпця в постійний обчислений стовпець призводить до того, що цей запит не може здійснювати пошуки індексу. Чому? Тестовано на кількох версіях SQL Server, включаючи 2016 SP1 CU1. Репрос З обчисленою колоною Зі звичайною колоною Біда в тому , з table1, col7. Таблиці та запити - це часткова (та …

3
План виконання НЕ використовує INDEX, він використовує сканування таблиць
Я знаю, коли мова йде про використання індексу або сканування таблиці, SQL Server використовує статистику, щоб побачити, який з них краще. У мене є таблиця з 20 мільйонами рядків. У мене індекс на (SnapshotKey, Measure) і цей запит: select Measure, SnapshotKey, MeasureBand from t1 where Measure = 'FinanceFICOScore' group by …

5
Отримання сканування, хоча я очікую пошуку
Мені потрібно оптимізувати SELECTоператор, але SQL Server завжди виконує сканування індексу замість пошуку. Це запит, який, звичайно, є в збереженій процедурі: CREATE PROCEDURE dbo.something @Status INT = NULL, @IsUserGotAnActiveDirectoryUser BIT = NULL AS SELECT [IdNumber], [Code], [Status], [Sex], [FirstName], [LastName], [Profession], [BirthDate], [HireDate], [ActiveDirectoryUser] FROM Employee WHERE (@Status IS NULL …

1
Заблоковані сеанси очікування з типом очікування PAGELATCH_ *?
Відредаговано: Чому звіти про сеанси блокуються, але чекають PAGELATCH_*, а не LCK_M_пов’язані з ними типи очікування? Раніше я припускав, що SQL-сервер буде повідомляти про сеанси блокування лише у стовпці blocking_session_Id. Якщо заблоковані сеанси чекали логічного блокування і нічого іншого, наприклад, а PAGELATCH_*.

2
MySQL: видалити… де..in () vs delete..from..join, і заблоковані таблиці при видаленні за допомогою підселектора
Відмова від відповідальності: вибачте, будь ласка, про відсутність знань про внутрішні бази даних. Ось це іде: Ми запускаємо програму (не написану нами), яка має великі проблеми з продуктивністю в періодичній роботі з очищення в базі даних. Запит виглядає так: delete from VARIABLE_SUBSTITUTION where BUILDRESULTSUMMARY_ID in ( select BUILDRESULTSUMMARY_ID from BUILDRESULTSUMMARY …

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.