Жизнь не стоит на месте, чтобы быть конкурентным нужно быть постоянно в движении,
видимо этому правилу и придерживаются разработчики SQL Server, посмотрим чем нас хотят удивить в SQL SERVER 2012
и что из этого может реально принести какую-то пользу.
1. Индексы ColumnStore
Отличительная особенность колоночных индексов в том, что они основаны на колоночном хранении данных.
Под построчным хранением данных обычно понимается физическое хранение всей строки таблицы в виде одной записи, в которой поля идут последовательно одно за другим, а за последним полем записи в общем случае идет первое следующей записи. Приблизительно так:
[A1, B1, C1], [A2, B2, C2], [A3, B3, C3]…
где A, B и С — это поля (столбцы), а 1,2 и 3 — номер записи (строки).
Колоночное хранение - с точки зрения SQL-клиента данные представлены как обычно в виде таблиц, но физически эти таблицы являются совокупностью колонок, каждая из которых, по сути, представляет собой таблицу из одного поля. При этом физически на диске значения одного поля хранятся последовательно друг за другом — приблизительно так:
[A1, A2, A3], [B1, B2, B3], [C1, C2, C3] и т.д.
Под построчным хранением данных обычно понимается физическое хранение всей строки таблицы в виде одной записи, в которой поля идут последовательно одно за другим, а за последним полем записи в общем случае идет первое следующей записи. Приблизительно так:
[A1, B1, C1], [A2, B2, C2], [A3, B3, C3]…
где A, B и С — это поля (столбцы), а 1,2 и 3 — номер записи (строки).
Колоночное хранение - с точки зрения SQL-клиента данные представлены как обычно в виде таблиц, но физически эти таблицы являются совокупностью колонок, каждая из которых, по сути, представляет собой таблицу из одного поля. При этом физически на диске значения одного поля хранятся последовательно друг за другом — приблизительно так:
[A1, A2, A3], [B1, B2, B3], [C1, C2, C3] и т.д.
Создается как обычный индекс в SSMS или через SQL CREATE NONCLUSTERED COLUMNSTORE INDEX
Есть конечно свои плюсы и минусы этой технологии, что не порадовало после создания такого индекса в таблицу напрямую не внести изменения.
Операторы INSERT,UPDATE, DELETE и MERGE не поддерживаются, для обновления данных приходится пользоваться всякими извращениями . Подробно
2. Наконец-то появились последовательности SEQUENCE, тем кто знаком с ORACLE знают какая это полезная штука.
Например если каждый год нужно заново нумеровать документы.
create sequence MySeq as int
start with 1 -- Start with value 1
increment by 1-- Increment with value 1
minvalue 0 -- Minimum value to start is zero
maxvalue 100 -- Maximum it can go to 100
no cycle -- Do not go above 100
cache 50 -- Increment 50 values in memory rather than incrementing from
SELECT NEXT VALUE FOR dbo.MySequence AS seq_no;
3. Разбивка выборки на страницы. OFFSET и FETCH для ограничения числа возвращаемых строк
Если выборку необходимо вернуть порциями эта фича будет очень кстати.
Обязательно задаем порядок ORDER, смещение от начала OFFSET, FETCH сколько строк нам требуется. Почитать тут.
USE AdventureWorks2012;
GO
-- Specifying variables for OFFSET and FETCH values
DECLARE @StartingRowNumber tinyint = 1
, @FetchRows tinyint = 8;
SELECT DepartmentID, Name, GroupName
FROM HumanResources.Department
ORDER BY DepartmentID ASC
OFFSET @StartingRowNumber ROWS
FETCH NEXT @FetchRows ROWS ONLY;