Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 fixed length column and spaces  [new]
мимо крокодил 000111один
Guest
вобщем ситуация следующая.

есть справочник

ref(id_ref char(5) PK, name nvarchar(1000));

id_ref, коды справочника. он статический, не меняется вообще. но коды разной длины:

CDD1
AB2
QQQQ3

клиентское по получает это в таком виде, что справа дополняется все пробелами до длины 5. потому им приходится пользовать trim при сравнениях. как бы поступить, чтобы эти пробелы им не приходили.
11 ноя 14, 16:28    [16829408]     Ответить | Цитировать Сообщить модератору
 Re: fixed length column and spaces  [new]
invm
Member

Откуда: Москва
Сообщений: 9721
мимо крокодил 000111один
как бы поступить, чтобы эти пробелы им не приходили.
Изменить тип столбца на varchar(5).
11 ноя 14, 16:30    [16829433]     Ответить | Цитировать Сообщить модератору
 Re: fixed length column and spaces  [new]
Гавриленко Сергей Алексеевич
Member

Откуда: Moscow
Сообщений: 37225
Выбрать подходящий тип данных.
11 ноя 14, 16:31    [16829448]     Ответить | Цитировать Сообщить модератору
 Re: fixed length column and spaces  [new]
Владислав Колосов
Member

Откуда:
Сообщений: 8570
Вообще-то фиксированная длина ключа выбрана, скорее всего, неслучайно. С другой стороны,почему ключ символьный?
11 ноя 14, 16:46    [16829614]     Ответить | Цитировать Сообщить модератору
 Re: fixed length column and spaces  [new]
мимо крокодил 000111один
Guest
Владислав Колосов,

не случайно, чтобы избежать page_splits/forwarded rows. чтобы можно было нормально код писать:

select * from device where id_state = 'DEV_OPENED'

а не

select * from device d inner join device_state ds on d.id_state = ds.id_state where id_state_code = 'DEV_OPENED'
11 ноя 14, 16:59    [16829710]     Ответить | Цитировать Сообщить модератору
 Re: fixed length column and spaces  [new]
мимо крокодил 000111один
Guest
"... чтобы избежать page_splits/forwarded rows..."

в ссылающихся таблицах, ссылающаяся колонка будет апдейтиться

в любом случае уже сменили на varchar()
11 ноя 14, 17:02    [16829738]     Ответить | Цитировать Сообщить модератору
 Re: fixed length column and spaces  [new]
Гавриленко Сергей Алексеевич
Member

Откуда: Moscow
Сообщений: 37225
мимо крокодил 000111один
"... чтобы избежать page_splits/forwarded rows..."

в ссылающихся таблицах, ссылающаяся колонка будет апдейтиться

Каким таким образом тип данных влияет на page_splits? O_o
11 ноя 14, 17:13    [16829860]     Ответить | Цитировать Сообщить модератору
 Re: fixed length column and spaces  [new]
мимо крокодил 000111один
Guest
Гавриленко Сергей Алексеевич
мимо крокодил 000111один
"... чтобы избежать page_splits/forwarded rows..."

в ссылающихся таблицах, ссылающаяся колонка будет апдейтиться

Каким таким образом тип данных влияет на page_splits? O_o



самым прямым. пусть у вас есть значение в varchar колонке 'ZZZ', вы меняете его на 'ZZZZZ'. Не места на стрианицу - будет page split для индекса или forwarded row для heap.
11 ноя 14, 17:16    [16829889]     Ответить | Цитировать Сообщить модератору
 Re: fixed length column and spaces  [new]
мимо крокодил 000111один
Guest
для char такого не будет, так как место уже выделено.
11 ноя 14, 17:17    [16829900]     Ответить | Цитировать Сообщить модератору
 Re: fixed length column and spaces  [new]
Glory
Member

Откуда:
Сообщений: 104751
мимо крокодил 000111один
самым прямым. пусть у вас есть значение в varchar колонке 'ZZZ', вы меняете его на 'ZZZZZ'. Не места на стрианицу - будет page split для индекса или forwarded row для heap.

А при char(5) на странице всегда будет место под любое изменение любого поля записи ?
11 ноя 14, 17:18    [16829911]     Ответить | Цитировать Сообщить модератору
 Re: fixed length column and spaces  [new]
Konst_One
Member

Откуда:
Сообщений: 11600
мимо крокодил 000111один
клиентское по получает это в таком виде, что справа дополняется все пробелами до длины 5


и что, теперь будете на сервер грешить из-за кривого клиента?
может просто сделаете view для своего клиента и забудете эту проблему
11 ноя 14, 17:19    [16829920]     Ответить | Цитировать Сообщить модератору
 Re: fixed length column and spaces  [new]
мимо крокодил 000111один
Guest
Glory
мимо крокодил 000111один
самым прямым. пусть у вас есть значение в varchar колонке 'ZZZ', вы меняете его на 'ZZZZZ'. Не места на стрианицу - будет page split для индекса или forwarded row для heap.

А при char(5) на странице всегда будет место под любое изменение любого поля записи ?


остальные колонки в зависимых таблицах fixed. если не хватит места при insert'e это уже другой разговор... речь об update'ах
11 ноя 14, 17:23    [16829954]     Ответить | Цитировать Сообщить модератору
 Re: fixed length column and spaces  [new]
Glory
Member

Откуда:
Сообщений: 104751
мимо крокодил 000111один
остальные колонки в зависимых таблицах fixed

Это вы про name nvarchar(1000) ?
11 ноя 14, 17:23    [16829957]     Ответить | Цитировать Сообщить модератору
 Re: fixed length column and spaces  [new]
мимо крокодил 000111один
Guest
Konst_One
мимо крокодил 000111один
клиентское по получает это в таком виде, что справа дополняется все пробелами до длины 5


и что, теперь будете на сервер грешить из-за кривого клиента?
может просто сделаете view для своего клиента и забудете эту проблему


была такая задумка изначально.
11 ноя 14, 17:24    [16829961]     Ответить | Цитировать Сообщить модератору
 Re: fixed length column and spaces  [new]
мимо крокодил 000111один
Guest
Glory
мимо крокодил 000111один
остальные колонки в зависимых таблицах fixed

Это вы про name nvarchar(1000) ?


не, это я про выделенное, а не про справочник, в котором name varchar(1000)
11 ноя 14, 17:25    [16829974]     Ответить | Цитировать Сообщить модератору
 Re: fixed length column and spaces  [new]
Glory
Member

Откуда:
Сообщений: 104751
мимо крокодил 000111один
не, это я про выделенное, а не про справочник, в котором name varchar(1000)

Все поля фиксированной длины конечно уменьшат сплиты, но место то займут и потом все это серверу еще придется читать с диска при запросах.
Стоит ли овчинка выделки ?
11 ноя 14, 17:28    [16830006]     Ответить | Цитировать Сообщить модератору
 Re: fixed length column and spaces  [new]
мимо крокодил 000111один
Guest
Glory
мимо крокодил 000111один
не, это я про выделенное, а не про справочник, в котором name varchar(1000)

Все поля фиксированной длины конечно уменьшат сплиты, но место то займут и потом все это серверу еще придется читать с диска при запросах.
Стоит ли овчинка выделки ?


в зависимых это преимущественно числа. в любом случае поменяли на varchar уже.
11 ноя 14, 17:29    [16830036]     Ответить | Цитировать Сообщить модератору
 Re: fixed length column and spaces  [new]
Владислав Колосов
Member

Откуда:
Сообщений: 8570
Если память не изменяет, то при построении b-tree серверу не придется дописывать "хвосты" для выравнивания. Или я отстал от жизни и b-tree больше не используется?

У нас поначалу тоже были символьные ключи (программист считал, что ему так легче будет), что привело к неприятным тормозам в неподходящие моменты. Ныне перевели на целочисленные.
11 ноя 14, 18:23    [16830473]     Ответить | Цитировать Сообщить модератору
 Re: fixed length column and spaces  [new]
daw
Member

Откуда: Муром -> Москва
Сообщений: 7381
Владислав Колосов
Если память не изменяет, то при построении b-tree серверу не придется дописывать "хвосты" для выравнивания. Или я отстал от жизни и b-tree больше не используется?


использовалось всегда, сколько мне помнится, b+, строго говоря.
хранятся ключи, даже на нелистовых уровнях, как есть - ничего для выравнивания не дописывается.
11 ноя 14, 19:15    [16830780]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить