Здравствуйте, Somescout, Вы писали:
S>Пытаюсь разобраться в columnstore index, но пока во всех тестах они медленнее чем обычные (не смотря на то, что execution plan говорит об обратном).
execution plan в SSMS врёт при подсчёте времени. Не обращайте внимания
S>Я создаю indexed view и на нём обычные и columnstore index (тесты провожу на большой 1с таблице, чтобы работать с большим объёмом данных).
S>S>CREATE VIEW dbo.test WITH SCHEMABINDING
S> AS
S> select d._IDRRef, d._Date_Time, v._LineNo2131, v._Fld2134, v._Fld2135 from dbo._Document191 d
S> JOIN dbo._Document191_VT2130 v on d._IDRRef = v._Document191_IDRRef
S>create unique clustered index test_pk on dbo.test(_IDRRef, _LineNo2131) WITH(MAXDOP=12)
S>create nonclustered index sales_date on dbo.test (_Date_Time, _LineNo2131) WITH(MAXDOP=12)
S>create nonclustered columnstore index sales_date2 on dbo.test (_Date_Time, _LineNo2131) WITH(MAXDOP=12)
S>
S>И запускаю тесты:
S>S>select SUM(_LineNo2131) from test t
S> WHERE t._Date_Time BETWEEN '2013-02-18' AND '2019-05-20'
S> OPTION (IGNORE_NONCLUSTERED_COLUMNSTORE_INDEX, RECOMPILE, MAXDOP 12)
S>select SUM(_LineNo2131) from test t
S> WHERE t._Date_Time BETWEEN '2013-02-18' AND '2019-05-20'
S> OPTION(RECOMPILE, MAXDOP 12)
S>select SUM(_LineNo2131) from test t
S> WHERE t._Date_Time BETWEEN '2013-02-18' AND '2019-05-20'
S> OPTION(EXPAND VIEWS, RECOMPILE, MAXDOP 12)
S>
S>Первый, соответственно, берёт индекс test и выполняется порядка 5 сек, второй sales_date2 (23 сек) и третий не использует индексы вьюшки (12 сек). Вроде сам запрос как раз того плана, который предполагается ускорять columnstore, но эффект получается обратным.
Зависит от данных и от того, что именно выбирается.
Рассматривайте columnstore index как просто отдельную таблицу из ключа и одной колонки.
Если у вас полное заполнение этой таблицы, и индекс не covered для запроса, и выбирается большая часть колонок таблицы, то ускорения и не будет.
А в вашем случае вообще идёт index scan, то есть, никакой с неко пользы и не получается.
S>В принципе меня устраивает быстродействие первого индекса (особенно когда выяснил, что оптимизатор может подставлять его в обычный запрос, не использующий вьюшку. Более того — он может подставить даже агрегированный индекс, с суммированием по дням, выдавая 0.057с!),
Учтите, что он это умеет в продакшне только в Enterprise версии
S>но просто интересно как правильно им пользоваться.
Columstore index — это вообще фишка для аналитики. Когда у вас в таблице несколько десятков-сотен колонок, заполненных большей частью nullами. А в выборке участвует только небольшая часть этихз колонок.
В таком сценарии columnstore indexes рулят по сравнению с поиском по широченным таблицам.