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

Откуда: Украина г. Хмельницкий
Сообщений: 628
Изменил в таблице длину поля с CHAR(12) на CHAR(80), предварительно удалил индексы связанные с этим полем, и потом создал их снова. После этого елементарный запрос к этой таблице стал выполняться в несколько раз дольше. Какая тут причина, и как вернуть прежнюю скорость?
Большое спасибо!
26 май 11, 17:42    [10715263]     Ответить | Цитировать Сообщить модератору
 Re: Скорость выполнения запроса  [new]
daw
Member

Откуда: Муром -> Москва
Сообщений: 7381
а точно именно char нужен, а не VARchar?
26 май 11, 17:47    [10715302]     Ответить | Цитировать Сообщить модератору
 Re: Скорость выполнения запроса  [new]
Гавриленко Сергей Алексеевич
Member

Откуда:
Сообщений: 37254
А текст вашего элементарного запроса можно увидеть?
26 май 11, 17:49    [10715324]     Ответить | Цитировать Сообщить модератору
 Re: Скорость выполнения запроса  [new]
iljy
Member

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

размеры таблицы возросли, так же размеры индексов, могла увеличиться фрагментация.
26 май 11, 17:49    [10715330]     Ответить | Цитировать Сообщить модератору
 Re: Скорость выполнения запроса  [new]
shanton
Member

Откуда: Украина г. Хмельницкий
Сообщений: 628
daw
а точно именно char нужен, а не VARchar?

Не принципиально. Был char я его и оставил, просто длину увеличил. Если сделать VARchar то быстрее будут запросы вполнятся?
26 май 11, 17:49    [10715331]     Ответить | Цитировать Сообщить модератору
 Re: Скорость выполнения запроса  [new]
shanton
Member

Откуда: Украина г. Хмельницкий
Сообщений: 628
Структура таблицы:
CREATE TABLE [dbo].[table93](
	[zak] [char](4) COLLATE Ukrainian_CI_AS NOT NULL,
	[color=red][kod_izd] [char](12) COLLATE Cyrillic_General_CI_AS NOT NULL,[/color]
	[naim_izd] [char](25) COLLATE Cyrillic_General_CI_AS NOT NULL,
	[kod_mat] [char](7) COLLATE Ukrainian_CI_AS NOT NULL,
	[naim_mat] [char](25) COLLATE Cyrillic_General_CI_AS NULL,
	[sortament] [char](10) COLLATE Cyrillic_General_CI_AS NULL,
	[marka] [char](7) COLLATE Cyrillic_General_CI_AS NULL,
	[razmer] [char](14) COLLATE Cyrillic_General_CI_AS NULL,
	[ed_izm] [char](10) COLLATE Cyrillic_General_CI_AS NULL,
	[q] [decimal](13, 8) NULL,
	[cex] [char](2) COLLATE Ukrainian_CI_AS NOT NULL,
	[transp] [decimal](5, 2) NULL,
	[cd] [decimal](10, 2) NULL,
	[cp] [decimal](10, 2) NULL,
	[cd_0] [decimal](16, 8) NULL,
	[cp_0] [decimal](16, 8) NULL,
	[cd_tr] [decimal](16, 8) NULL,
	[cp_tr] [decimal](16, 8) NULL
) ON [PRIMARY]
запрос:
SELECT zak, kod_izd, naim_izd FROM table93
конечно он выдаёт кучу повторяющихсяч записей, если с групировкой:
SELECT zak, kod_izd, naim_izd FROM table93 GROUP BY zak, kod_izd, naim_izd
то намного быстрее.
26 май 11, 17:53    [10715358]     Ответить | Цитировать Сообщить модератору
 Re: Скорость выполнения запроса  [new]
iap
Member

Откуда: Москва
Сообщений: 47142
А на индексы эти посмотреть можно?
И на запросы, в которых эти индексы используются сервером.
Кстати, а они используются (см. в актуальном плане)
26 май 11, 17:55    [10715373]     Ответить | Цитировать Сообщить модератору
 Re: Скорость выполнения запроса  [new]
shanton
Member

Откуда: Украина г. Хмельницкий
Сообщений: 628
Индекс:
CREATE NONCLUSTERED INDEX [tInt93] ON [dbo].[table93] 
(
	[zak] ASC,
	[kod_izd] ASC,
	[kod_mat] ASC,
	[cex] ASC
) ON [PRIMARY]
а как глянуть используется он или нет?
26 май 11, 18:04    [10715432]     Ответить | Цитировать Сообщить модератору
 Re: Скорость выполнения запроса  [new]
daw
Member

Откуда: Муром -> Москва
Сообщений: 7381
shanton
Не принципиально. Был char я его и оставил, просто длину увеличил. Если сделать VARchar то быстрее будут запросы вполнятся?

то есть, разницу вы не знаете?
char - это тип с постоянной длиной. то есть, каждое значение в столбце добивается пробелами до указанной длины - 80.
увеличили длину - каждая строка стала тяжелее на 68 байт. соответственно, читать теперь надо больше. не в разы, конечно, но все-таки: была каждая строка ~180 байт - стала ~ 250. если запрос по многу строк выдает - оно скажется.
вот varchar хранит ровно столько, сколько внесли. внесли 'asdf' - 4 байта и сохранится.

ну и на планах это могло сказаться, конечно.
26 май 11, 18:25    [10715545]     Ответить | Цитировать Сообщить модератору
 Re: Скорость выполнения запроса  [new]
daw
Member

Откуда: Муром -> Москва
Сообщений: 7381
shanton
а как глянуть используется он или нет?

https://www.sql.ru/faq/faq_topic.aspx?fid=393
26 май 11, 18:27    [10715554]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить