powered by simpleCommunicator - 2.0.60     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Изменение типов данных в большой таблице. Подводные камни
5 сообщений из 5, страница 1 из 1
Изменение типов данных в большой таблице. Подводные камни
    #39626327
Glebanski
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Привет.

Хотелось бы получить подтверждение своим теоретическим предположениям у местных гуру.
Дело касается в первую очередь времени выполнения.

Допустим у нас есть некая таблица размером скажем с терабайт и строк эдак 15 млрд.
EventDate datetime2(2),
SomeID int,
SomeValue double,
SomeFK int,
LongStrValue nvarchar(max),
ShortStrValue nvarchar(20)

Первые два поля = Primary Key.
Какие соображения надо учитывать меняя тип данных у следущих полей?
1. EventDate datetime2(2) -> datetime2(7)
Тут никаких constraint не проверяется, надо токо метаданные обновить. Но это Primary Key. И поле с фиксированной длиной. То есть надо все данные в дата файле передвигать. Так? То есть по сути самая тяжеловесная операция.
Доп. вопрос: надо ли после этого индекс ребилдить или оно само в процессе дефрагментируется? Что-то мне подсказывает, то само...

2. LongStrValue nvarchar(max) -> nvarchar(200)
Это тип данных с нефиксированной длиной. Метаданные обновить, но и еще проверить, влезают ли все значения в 200. Это может занять время, так? Играет ли тут какую-нить роли статистика?

3. ShortStrValue nvarchar(20) -> nvarchar(50)
Вот тут я вообще никакой доп. задержки не ожидаю. Я прав?

4. SomeFK int ->bigint
Можно отключить constraint временно и поменять тип данных, сэкономив время на проверке целостности.
Но это поле с фикс. длиной. Будет ли операция столь же тяжеловесной как и в (1) ? Приведет ли к большей фрагментации?
...
Рейтинг: 0 / 0
Изменение типов данных в большой таблице. Подводные камни
    #39626330
Владислав Колосов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Glebanski,

при увеличении размерности обычно не чекается при уменьшении - да. Строки, конечно, просмотром только можно проверить.
...
Рейтинг: 0 / 0
Изменение типов данных в большой таблице. Подводные камни
    #39626357
invm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Glebanski,

Изучайте
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
use tempdb;
go

create function dbo.fnColumnsInfo
(
  @name sysname
)
returns table
as
return (
 select
  c.name as column_name,
  t.name,
  pc.max_length,
  pc.is_dropped,
  pc.leaf_offset
 from
  sys.system_internals_partition_columns pc join
  sys.partitions p on p.partition_id = pc.partition_id left join
  sys.columns c on column_id = pc.partition_column_id and c.object_id = p.object_id join
  sys.types t on t.system_type_id = pc.system_type_id and t.user_type_id = t.system_type_id
 where
  p.object_id = object_id(@name)
);
go

create table dbo.t
(
 EventDate datetime2(2),
 SomeID int,
 SomeValue float,
 SomeFK int,
 LongStrValue nvarchar(max),
 ShortStrValue nvarchar(20)
);

select * from dbo.fnColumnsInfo(N'dbo.t');
go

alter table dbo.t alter column EventDate datetime2(7);
select * from dbo.fnColumnsInfo(N'dbo.t');
go

alter table dbo.t alter column LongStrValue nvarchar(200);
select * from dbo.fnColumnsInfo(N'dbo.t');
go

alter table dbo.t alter column ShortStrValue nvarchar(50);
select * from dbo.fnColumnsInfo(N'dbo.t');
go

alter table dbo.t alter column SomeFK bigint;
select * from dbo.fnColumnsInfo(N'dbo.t');
go

drop table dbo.t;
drop function dbo.fnColumnsInfo;
go

...
Рейтинг: 0 / 0
Изменение типов данных в большой таблице. Подводные камни
    #39626380
Glebanski
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
invm,
Благодарю!
...
Рейтинг: 0 / 0
Изменение типов данных в большой таблице. Подводные камни
    #39628686
Glebanski
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вот отличная статья на тему https://social.technet.microsoft.com/wiki/contents/articles/29228.sql-server-internals-of-a-change-of-the-size-of-a-fixed-data-type.aspx
Хорошо, что в ней объяснили, а то у меня глаза на лоб когда измененные поля в конец строки переместились
...
Рейтинг: 0 / 0
5 сообщений из 5, страница 1 из 1
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Изменение типов данных в большой таблице. Подводные камни
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]