SQL Server: сравнение со старыми решениями
Содержание:
1. Новое решение с использованием оконных агрегатов;
2.Сравнение со старыми решениями (Вы читаете данный раздел).
В данной статье я просто представляю данные о производительности, чтобы вы могли сравнить их с новым решением. Помните, что для оптимального функционирования нового решения требуется только один индекс. Старые решения разбивают события начала и завершения, чтобы разделить результирующие строки и организовать их в хронологическом порядке. Поэтому для их оптимальной производительности требуется два вспомогательных индекса: один для событий начала и другой для событий завершения. Используйте следующий программный код для создания рекомендуемых индексов:
В представленном выше коде приводится одно из старых решений (назовем его старым решением 1). Это решение основано на оконном агрегате для вычисления суммы с нарастающим итогом и номера строк.
Статистика производительности для старого решения 1: время нейтрального процессора = 6047 мс, истекшее время = 6549 мс, число логических операций чтения = 4974. В новом решении используется меньше операций чтения, хотя при этом расходуется больше времени центрального процессора.
В листинге 5 приведено другое старое решение (назовем его старым решением 2). Это решение основывается только на номерах строк. План для старого решения 2 показан на рисунке выше.
Статистика производительности для старого решения 2: время центрального процессора = 2719 мс, истекшее время = 3147 мс, число логических операций чтения = 4974. Новое решение немного медленнее и требует больше времени центрального процессора, но в нем используется меньше операций чтения.
Итак, я нашел решение задачи упаковки интервалов, требующее лишь одного вспомогательного индекса и единственного прохода по данным. Любопытно сравнение с прежними решениями. При наличии лишь одного индекса вместо двух новое решение оказывает меньшее негативное влияние на производительность записи и требует меньшего числа операций чтения. Длительность выполнения меньше, чем у старого решения 1 и немного больше, чем у старого решения 2. Эти результаты показывают, сколь полезно повторно обращаться к известным задачам и никогда не считать дело завершенным. Бывает, что удается найти новые решения, улучшающие некоторые характеристики прежних.
Обязательно ознакомитесь с новыми решениями задачи упаковки интервалов в SQL Server, но только после того, как построите на своем загородном участке дом? Тогда вам потребуется Газобетон Стоунлайт (http://greenbud.kiev.ua/gazobeton/gazobloki-stounlajt). Это идеальный материал для малоэтажного строительства, который позволяет возвести в самые сжатые сроки архитектурную конструкцию практически любой сложности. Подробности на greenbud.kiev.ua.
1. Новое решение с использованием оконных агрегатов;
2.
В данной статье я просто представляю данные о производительности, чтобы вы могли сравнить их с новым решением. Помните, что для оптимального функционирования нового решения требуется только один индекс. Старые решения разбивают события начала и завершения, чтобы разделить результирующие строки и организовать их в хронологическом порядке. Поэтому для их оптимальной производительности требуется два вспомогательных индекса: один для событий начала и другой для событий завершения. Используйте следующий программный код для создания рекомендуемых индексов:
CREATE UNIQUE INDEX idx.start ON dbo.Sessions(actid, starttime, sessionid);
CREATE UNIQUE INDEX idx.end ON dbo.Sessions(actid, endtime, sessionid);В представленном выше коде приводится одно из старых решений (назовем его старым решением 1). Это решение основано на оконном агрегате для вычисления суммы с нарастающим итогом и номера строк.
Статистика производительности для старого решения 1: время нейтрального процессора = 6047 мс, истекшее время = 6549 мс, число логических операций чтения = 4974. В новом решении используется меньше операций чтения, хотя при этом расходуется больше времени центрального процессора.
В листинге 5 приведено другое старое решение (назовем его старым решением 2). Это решение основывается только на номерах строк. План для старого решения 2 показан на рисунке выше.
Статистика производительности для старого решения 2: время центрального процессора = 2719 мс, истекшее время = 3147 мс, число логических операций чтения = 4974. Новое решение немного медленнее и требует больше времени центрального процессора, но в нем используется меньше операций чтения.
Итак, я нашел решение задачи упаковки интервалов, требующее лишь одного вспомогательного индекса и единственного прохода по данным. Любопытно сравнение с прежними решениями. При наличии лишь одного индекса вместо двух новое решение оказывает меньшее негативное влияние на производительность записи и требует меньшего числа операций чтения. Длительность выполнения меньше, чем у старого решения 1 и немного больше, чем у старого решения 2. Эти результаты показывают, сколь полезно повторно обращаться к известным задачам и никогда не считать дело завершенным. Бывает, что удается найти новые решения, улучшающие некоторые характеристики прежних.
Обязательно ознакомитесь с новыми решениями задачи упаковки интервалов в SQL Server, но только после того, как построите на своем загородном участке дом? Тогда вам потребуется Газобетон Стоунлайт (http://greenbud.kiev.ua/gazobeton/gazobloki-stounlajt). Это идеальный материал для малоэтажного строительства, который позволяет возвести в самые сжатые сроки архитектурную конструкцию практически любой сложности. Подробности на greenbud.kiev.ua.