Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 снова varchar(max) vs text  [new]
Alexander Us
Member

Откуда:
Сообщений: 1132
Есть старая таблица с полями text и image.

Средняя / максимальная длинна данных: 5 кб / 120 кб.
Размер таблицы: 80 ГБ.
Server: SQL 2005 Enterprise

Какие преемущества / проблемы можно получить пересоздав таблицу с полями varchar(max) и varbinary(max)?

ЗЫ: клиентские приложения работают в обоиз вариантах.
27 сен 13, 19:08    [14894725]     Ответить | Цитировать Сообщить модератору
 Re: снова varchar(max) vs text  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 31430
Alexander Us
Какие преемущества / проблемы можно получить пересоздав таблицу с полями varchar(max) и varbinary(max)?
Только польза, никаких недостатков.
27 сен 13, 21:11    [14895048]     Ответить | Цитировать Сообщить модератору
 Re: снова varchar(max) vs text  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 31430
alexeyvg
Alexander Us
Какие преемущества / проблемы можно получить пересоздав таблицу с полями varchar(max) и varbinary(max)?
Только польза, никаких недостатков.
Например https://www.sql.ru/forum/1048061/indexed-view-pole-ntext-preobrazuetsya-v-nvarchar-256-no-sql-etogo-ne-zamechaet
27 сен 13, 21:13    [14895055]     Ответить | Цитировать Сообщить модератору
 Re: снова varchar(max) vs text  [new]
Alexander Us
Member

Откуда:
Сообщений: 1132
alexeyvg, спасибо.


Есть ли ещё преемущества / проблемы?

Начиная с SQL2005 MS рекомендует переходить с text на varchar(max), так как text устарел.
Но сейчас уже SQL2012 а тип text и ныне остаётся в Sql Server.

Я бы хотел перевести существующие таблицы на varchar(max) но для этого нужно чётко представлять как выгоды от такого шага, так и возможные негативные последствия.

Есть ли у лого опыт такого переводя для больших( > 10 GB ) таблиц?
Как это сказалось на производительности?
28 сен 13, 11:49    [14895931]     Ответить | Цитировать Сообщить модератору
 Re: снова varchar(max) vs text  [new]
Winnipuh
Member [заблокирован]

Откуда: Київ
Сообщений: 10428
Alexander Us
alexeyvg, спасибо.


Есть ли ещё преемущества / проблемы?

Начиная с SQL2005 MS рекомендует переходить с text на varchar(max), так как text устарел.
Но сейчас уже SQL2012 а тип text и ныне остаётся в Sql Server.

Я бы хотел перевести существующие таблицы на varchar(max) но для этого нужно чётко представлять как выгоды от такого шага, так и возможные негативные последствия.

Есть ли у лого опыт такого переводя для больших( > 10 GB ) таблиц?
Как это сказалось на производительности?


Но сейчас уже SQL2014 а тип text и ныне остаётся в Sql Server.
28 сен 13, 12:36    [14896009]     Ответить | Цитировать Сообщить модератору
 Re: снова varchar(max) vs text  [new]
Alexander Us
Member

Откуда:
Сообщений: 1132
идей больше нет?
30 сен 13, 18:38    [14903337]     Ответить | Цитировать Сообщить модератору
 Re: снова varchar(max) vs text  [new]
Shakill
Member

Откуда: мск
Сообщений: 1880
Alexander Us,

сравните список строковых функций, которые можно использовать с text и c varchar(max). те же LEN() и LEFT()
30 сен 13, 18:47    [14903383]     Ответить | Цитировать Сообщить модератору
 Re: снова varchar(max) vs text  [new]
Alexander Us
Member

Откуда:
Сообщений: 1132
Shakill,
спасибо.

Первое обобщение:
- с text не сохдать индексированный вид,
- есть различия в использовании некоторых функций len/datalength и.т.д.
- с text/image не работают операторы UNION, DESTINCT, EXCEPT

Остаётся неясным:
- есть ли разница в производительности


Кто то может дополнить список?
30 сен 13, 19:42    [14903579]     Ответить | Цитировать Сообщить модератору
 Re: снова varchar(max) vs text  [new]
Shakill
Member

Откуда: мск
Сообщений: 1880
Alexander Us
- есть различия в использовании некоторых функций len/datalength и.т.д.
не то что есть различия, а некоторые функции вообще не работают с text, то есть этот тип просто неудобен по сравнению с varchar(max)
30 сен 13, 19:46    [14903593]     Ответить | Цитировать Сообщить модератору
 Re: снова varchar(max) vs text  [new]
Гость333
Member

Откуда:
Сообщений: 3683
Alexander Us
Кто то может дополнить список?

С типом данных varchar(max) не работают инструкции, предназначенные для text: TEXTPTR, READTEXT, WRITETEXT, UPDATETEXT.
30 сен 13, 20:08    [14903648]     Ответить | Цитировать Сообщить модератору
 Re: снова varchar(max) vs text  [new]
Glory
Member

Откуда:
Сообщений: 104760
Alexander Us
Кто то может дополнить список?

This feature will be removed in a future version of Microsoft SQL Server. Avoid using this feature in new development work, and plan to modify applications that currently use this feature. Use varchar(max), nvarchar(max) and varbinary(max) data types instead.

По-моему этого более чем достаточно для отказа от text
1 окт 13, 10:38    [14905160]     Ответить | Цитировать Сообщить модератору
 Re: снова varchar(max) vs text  [new]
Alexander Us
Member

Откуда:
Сообщений: 1132
Glory,

Безусловно, этого достаточно для отказа от типа "текст" в новых разработках.
Сейчас же речь больше о том, имеет ли смысл переводить старые таблицы с text на varchar(max) и с image на verbinary(max).
И к каким последствиям это может привести.

Цитата, на которую Вы ссылаетесь появилась ещё в СКЛ 2005.
Но тип "текст" до сих пор не удалён.
Возникает вопрос "почему"?
1 окт 13, 10:54    [14905254]     Ответить | Цитировать Сообщить модератору
 Re: снова varchar(max) vs text  [new]
Glory
Member

Откуда:
Сообщений: 104760
Alexander Us
Сейчас же речь больше о том, имеет ли смысл переводить старые таблицы с text на varchar(max) и с image на verbinary(max).
И к каким последствиям это может привести.

К таким же, как и изменения на любой другой тип данных.
На сервере это изменение никак не скажется. А ваши серверный код и клиентские приложения придется тестировать.

Alexander Us
Цитата, на которую Вы ссылаетесь появилась ещё в СКЛ 2005.
Но тип "текст" до сих пор не удалён.
Возникает вопрос "почему"?

Не хотят терять таких, как вы. Иначе вы не купите апгрейд на следующую версию
1 окт 13, 11:00    [14905302]     Ответить | Цитировать Сообщить модератору
 Re: снова varchar(max) vs text  [new]
Alexander Us
Member

Откуда:
Сообщений: 1132
Glory
На сервере это изменение никак не скажется.
Сомневаюсь, что никак:

При удалении старых данных методом обнуления "update ... set ... = NULL" в столбцах "text" столкнулся с таким эффектом: освобождённое дисковое пространство остаётся "висеть" и может быть снова занято только данными типа "text".
Со столбцами "varchar(max)" пока такого эффекта не заметил.
Так что в данном контексте изменение скажется положительно.

Glory
Не хотят терять таких, как вы. Иначе вы не купите апгрейд на следующую версию

Чтобы покупали апгрейд на следующую версию было бы разумным опубликовать список различий varchar(max) vs. text,
раз уж один тип должен заменить другой.
1 окт 13, 11:44    [14905669]     Ответить | Цитировать Сообщить модератору
 Re: снова varchar(max) vs text  [new]
Glory
Member

Откуда:
Сообщений: 104760
Alexander Us
Glory
На сервере это изменение никак не скажется.
Сомневаюсь, что никак:

При удалении старых данных методом обнуления "update ... set ... = NULL" в столбцах "text" столкнулся с таким эффектом: освобождённое дисковое пространство остаётся "висеть" и может быть снова занято только данными типа "text".
Со столбцами "varchar(max)" пока такого эффекта не заметил.
Так что в данном контексте изменение скажется положительно.

Автор цитаты наверное не слышал никогда про удаление полей переменной длины. Особенно из середины заполненных страниц данных.

Alexander Us
Чтобы покупали апгрейд на следующую версию было бы разумным опубликовать список различий varchar(max) vs. text,
раз уж один тип должен заменить другой.

Если вам _нужно_ менять тип полей, то вам все рано придется все тестировать. И от типа поля это не зависит.
1 окт 13, 11:50    [14905729]     Ответить | Цитировать Сообщить модератору
 Re: снова varchar(max) vs text  [new]
Гость333
Member

Откуда:
Сообщений: 3683
Alexander Us
При удалении старых данных методом обнуления "update ... set ... = NULL" в столбцах "text" столкнулся с таким эффектом: освобождённое дисковое пространство остаётся "висеть" и может быть снова занято только данными типа "text".
Со столбцами "varchar(max)" пока такого эффекта не заметил.

Репро в студию.
1 окт 13, 11:56    [14905782]     Ответить | Цитировать Сообщить модератору
 Re: снова varchar(max) vs text  [new]
Shakill
Member

Откуда: мск
Сообщений: 1880
Alexander Us
Чтобы покупали апгрейд на следующую версию было бы разумным опубликовать список различий varchar(max) vs. text, раз уж один тип должен заменить другой.
вот, например Using Large-Value Data Types
1 окт 13, 11:57    [14905795]     Ответить | Цитировать Сообщить модератору
 Re: снова varchar(max) vs text  [new]
Alexander Us
Member

Откуда:
Сообщений: 1132
Гость333
Репро в студию.
Извините, если немного тыкаю пальцем в небо: сейчас некогда создать репро...

Кажется, данный/похожий случай был описан здесь:
DBCC SHRINKFILE and SHRINKDATABASE commands may not work because of sparsely populated text, ntext, or image columns

и здесь:
Reclaiming deleted but unused LOB space in SQL 2005

У меня было так: удалил ("update ... set ... = NULL") старые данные в столбце "text" и не смог вернуть освободившееся место системе.
1 окт 13, 14:33    [14907213]     Ответить | Цитировать Сообщить модератору
 Re: снова varchar(max) vs text  [new]
Glory
Member

Откуда:
Сообщений: 104760
Alexander Us
У меня было так: удалил ("update ... set ... = NULL") старые данные в столбце "text" и не смог вернуть освободившееся место системе.

Ну так "я не смог" вовсе не означает, что заявленное вами изменение типа данных поля, как то скажется на сервере. Фрагментация - это обыденное явление
1 окт 13, 14:43    [14907277]     Ответить | Цитировать Сообщить модератору
 Re: снова varchar(max) vs text  [new]
Alexander Us
Member

Откуда:
Сообщений: 1132
Glory
Ну так "я не смог" вовсе не означает, что заявленное вами изменение типа данных поля, как то скажется на сервере. Фрагментация - это обыденное явление

Полагаю, изменение на varchar(max) скажется в положительную сторону.
Данная фрагментация описана толко для типов text и image: FIX: TEXT/IMAGE Data Storage Space Not Reclaimed Correctly

А судя по названию статьи и способу решения проблемы (перезаливка данных с BCP) явление это не совсем "обыденное".
Я бы отнёс перезаливку данных с BCP к категории "крайних" решений.

Если Вы в данной ситуации "смогли" без перезаливки данных,
поделитесь пожалуйста опытом.
1 окт 13, 15:24    [14907606]     Ответить | Цитировать Сообщить модератору
 Re: снова varchar(max) vs text  [new]
Glory
Member

Откуда:
Сообщений: 104760
Alexander Us
Полагаю, изменение на varchar(max) скажется в положительную сторону.

Вы меняете ради замены ? Или для того, чтобы скучно не было ?

Alexander Us
Данная фрагментация описана толко для типов text и image: FIX: TEXT/IMAGE Data Storage Space Not Reclaimed Correctly

А вы это видели ?
APPLIES TO
Microsoft SQL Server 7.0 Standard Edition

Alexander Us
Если Вы в данной ситуации "смогли" без перезаливки данных,
поделитесь пожалуйста опытом.

Сначала вы говорили, что вообще не можете освободить место. Теперь вам уже надо "одной кнопкой"
1 окт 13, 15:29    [14907637]     Ответить | Цитировать Сообщить модератору
 Re: снова varchar(max) vs text  [new]
Гость333
Member

Откуда:
Сообщений: 3683
Alexander Us
Кажется, данный/похожий случай был описан здесь:
DBCC SHRINKFILE and SHRINKDATABASE commands may not work because of sparsely populated text, ntext, or image columns

support.microsoft.com
APPLIES TO
•Microsoft SQL Server 2000 Standard Edition
•Microsoft SQL Server 7.0 Standard Edition

Как-то старовато :)

Alexander Us
и здесь:
Reclaiming deleted but unused LOB space in SQL 2005

Но по этой ссылке вроде не говорится "замените эти типы данных на varchar(max), nvarchar(max) и varbinary(max), и всё будет в шоколаде"? (особо не вчитывался, т.к. "многабукф" :)

Alexander Us
У меня было так: удалил ("update ... set ... = NULL") старые данные в столбце "text" и не смог вернуть освободившееся место системе.

Охотно верю!
А потом создали точно такую же таблицу, но с типом varchar(max) вместо text, сделали такой же апдейт, и место освободилось?
А какие для этой таблицы были, к примеру, значения опций text in row и large value types out of row?
1 окт 13, 15:42    [14907735]     Ответить | Цитировать Сообщить модератору
 Re: снова varchar(max) vs text  [new]
Alexander Us
Member

Откуда:
Сообщений: 1132
Гость333
А какие для этой таблицы были, к примеру, значения опций text in row и large value types out of row?

такие:
SELECT [name] AS tablename, large_value_types_out_of_row FROM sys.tables -- =>  0 

select OBJECTPROPERTY(object_id('......'),'TableTextInRowLimit')  -- => 0
1 окт 13, 17:55    [14908644]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить