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

Откуда:
Сообщений: 334
SQL2005. Делаю запрос по большой таблице, в которой есть поле [Data] ntext:
select count(*) from [Data_2014_12_10]

Результат моментальный - 99764 строк, то есть данные отбираются очень быстро!
При копировании данных во временную таблицу без поля [Data], данные копируются достаточно быстро (10 секунд)
При копировании данных во временную таблицу с полем cast([Data] as varchar(900)), данные копируются ОЧЕНЬ медленно, причём сокращение длины получаемого varchar практически не оказывает влияния на производительность. Значит дело, скорее всего, не в объёме копируемых данных. Остаётся само преобразование cast.
Это нормально, что cast так сильно влияет на производительность?
Возможно более быстрое преобразование ntext в varchar(900)?
12 дек 14, 21:37    [16991585]     Ответить | Цитировать Сообщить модератору
 Re: Вопрос о производительности cast(ntext as varchar(900))  [new]
leov
Member

Откуда: С-Петербург
Сообщений: 616
=Сергей=,

может какй-нибудь substring попробовать?
12 дек 14, 21:56    [16991638]     Ответить | Цитировать Сообщить модератору
 Re: Вопрос о производительности cast(ntext as varchar(900))  [new]
=Сергей=
Member

Откуда:
Сообщений: 334
leov
может какй-нибудь substring попробовать?

пробовал, тоже медленно
12 дек 14, 22:12    [16991683]     Ответить | Цитировать Сообщить модератору
 Re: Вопрос о производительности cast(ntext as varchar(900))  [new]
guest123456
Guest
=Сергей=,
А в исходной таблице тип поля изменить или включить "text in row" не вариант?
12 дек 14, 23:26    [16991901]     Ответить | Цитировать Сообщить модератору
 Re: Вопрос о производительности cast(ntext as varchar(900))  [new]
leov
Member

Откуда: С-Петербург
Сообщений: 616
guest123456,

вот я тоже мозгами скриплю и прихожу к мнению что надо таки в varchar(max) это всё переконвертить и не париться больше
ибо анахронизм это
видимо не предназначен этот тип для вот такой прямой работы с полями
12 дек 14, 23:39    [16991934]     Ответить | Цитировать Сообщить модератору
 Re: Вопрос о производительности cast(ntext as varchar(900))  [new]
leov
Member

Откуда: С-Петербург
Сообщений: 616
=Сергей=,

а к nvarchar приводить пробовали?
12 дек 14, 23:55    [16991980]     Ответить | Цитировать Сообщить модератору
 Re: Вопрос о производительности cast(ntext as varchar(900))  [new]
NickAlex66
Member

Откуда:
Сообщений: 319
=Сергей=,

Вы приводите 2х байтовый символ в строке к однобайтовому. Попробуйте приведение к nvarchar нужной длинны.
13 дек 14, 00:09    [16992021]     Ответить | Цитировать Сообщить модератору
 Re: Вопрос о производительности cast(ntext as varchar(900))  [new]
=Сергей=
Member

Откуда:
Сообщений: 334
NickAlex66
=Сергей=,

Вы приводите 2х байтовый символ в строке к однобайтовому. Попробуйте приведение к nvarchar нужной длинны.

Пробовал, особенной разницы не увидел.
15 дек 14, 11:55    [16997946]     Ответить | Цитировать Сообщить модератору
 Re: Вопрос о производительности cast(ntext as varchar(900))  [new]
Glory
Member

Откуда:
Сообщений: 104760
select left([Data],900) into #t from mytable
15 дек 14, 11:58    [16997961]     Ответить | Цитировать Сообщить модератору
 Re: Вопрос о производительности cast(ntext as varchar(900))  [new]
=Сергей=
Member

Откуда:
Сообщений: 334
guest123456
А в исходной таблице тип поля изменить или включить "text in row" не вариант?

Нет, на сервере ничего менять нельзя
15 дек 14, 12:02    [16997993]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить