nvarchar(max) vs nvarchar(N)
MS SQL Server offers several data types for storing strings.
The most popular are nvarchar(N)
(1 ≤ N ≤ 4000) and nvarchar(max)
, which allow storing Unicode-encoded string data.
Application developers often transfer their experience with the string
type from programming languages like C# or Java to databases and automatically choose nvarchar(max)
, which can store strings up to 2GB.
However, databases store and process data in fundamentally different ways.
In this article, I will explain and demonstrate the consequences of unjustified use of the nvarchar(max)
type.
nvarchar(max) vs nvarchar(N)
MS SQL Server предоставляет нам на выбор несколько типов данных для хранения строк. Самый популярный - nvarchar(N)
(где 1 ≤ N ≤ 4000) или nvarchar(max)
, который позволяет хранить строковые данные в кодировке Юникод. При этом, часто прикладные разработчики переносят опыт использования типа string
из языка приложения (C# или Java, например) в базы данных и не задумываясь выбирают тип nvarchar(max)
, позволяющий хранить строки размером до 2ГБ. Но базы данных хранят и работают с данными совершенно другим способом. В этой статье я расскажу и покажу на практике, к чему может приводить неоправданное использование типа nvarchar(max)
.
Неизвестный T-SQL
Несколько редко используемых, но вполне полезных функций MSSQL. Если вы никогда не слышали о функциях CHOOSE, ROW_NUMBER, RANK, DENSE_RANK, FIRST_VALUE, LAST_VALUE, LAG, LEAD, PERCENTILE_CONT и PERCENTILE_DISC, то ниже вы узнаете, какие полезные вещи можно сделать их помощью. Так же, я покажу несколько примеров использования выражений OVER и PARTITION BY в оконных функциях.
Useful Constraints
Usually we use constraints to specify the allowable values for the columns in tables. And it works perfect! But beyond that, constraints help query analizer to generate more effective query plans. How it works? Read below.
О пользе ограничений
Как мы привыкли, ограничения (CONSTRAINT) - способ указания допустимых значений для столбцов в таблице. С этой своей функцией они справляются на отлично! Но помимо этого, ограничения так же помогают анализатору запросов генерировать более эффективный план выполнения. Как именно? Читайте ниже.
Есть такое мнение "Дайте MS SQL максимальную информацию о данных, которые вы храните". Что это значит? Во-первых, очевидные вещи: подбирайте наиболее подходящий тип данных (там где нужен int, можно не использовать bigint или float), указывайте размерность строковых или бинарных данных (nvarchar(10) вместо nvarchar(max)). А во-вторых - это ограничения: если значение в столбце может быть в пределах от 1 до 4 то укажите это явно, сервер вам только спасибо скажет!