Разобраться с индексами, как?

User avatar
Pingvin
Уже с Приветом
Posts: 660
Joined: 22 Jan 2001 10:01
Location: North Bay, CA

Разобраться с индексами, как?

Post by Pingvin »

Есть database на MS SQL 2000, некоторые запросы работают медленно. Как понять, какие индексы нужно добавить, чтобы ускороть работу запросов?
User avatar
A. Fig Lee
Уже с Приветом
Posts: 12072
Joined: 17 Nov 2002 03:41
Location: английская колония

Re: Разобраться с индексами, как?

Post by A. Fig Lee »

Pingvin wrote:Есть database на MS SQL 2000, некоторые запросы работают медленно. Как понять, какие индексы нужно добавить, чтобы ускороть работу запросов?


С Новым Годом!
Верить нельзя никому - даже себе. Мне - можно!
User avatar
CTAC_P
Уже с Приветом
Posts: 6789
Joined: 01 Jun 2001 09:01

Re: Разобраться с индексами, как?

Post by CTAC_P »

A. Fig Lee wrote:
Pingvin wrote:Есть database на MS SQL 2000, некоторые запросы работают медленно. Как понять, какие индексы нужно добавить, чтобы ускороть работу запросов?


С Новым Годом!

Присоединяюс! Налейте себе чего-нибудь покрепче, сразу понятно станет. Если у вас есть запрос типа:
select sto_gramm from magazin, stakan where magazin.krepost>40 and magazin.ob'em > stakan.ob'em*10
то индексы надо повесить на все выражения, использованые с where, а именно magazin.krepost, magazin.ob'em и stakan.ob'em*10
User avatar
Pingvin
Уже с Приветом
Posts: 660
Joined: 22 Jan 2001 10:01
Location: North Bay, CA

Re: Разобраться с индексами, как?

Post by Pingvin »

A. Fig Lee wrote:
Pingvin wrote:Есть database на MS SQL 2000, некоторые запросы работают медленно. Как понять, какие индексы нужно добавить, чтобы ускороть работу запросов?


С Новым Годом!

И Вас туда же!
А если подумать?
User avatar
A. Fig Lee
Уже с Приветом
Posts: 12072
Joined: 17 Nov 2002 03:41
Location: английская колония

Re: Разобраться с индексами, как?

Post by A. Fig Lee »

Pingvin wrote:
A. Fig Lee wrote:
Pingvin wrote:Есть database на MS SQL 2000, некоторые запросы работают медленно. Как понять, какие индексы нужно добавить, чтобы ускороть работу запросов?


С Новым Годом!

И Вас туда же!
А если подумать?

Ну какой SQL на Новый Год, если подумать? :pain1:
Верить нельзя никому - даже себе. Мне - можно!
User avatar
Pingvin
Уже с Приветом
Posts: 660
Joined: 22 Jan 2001 10:01
Location: North Bay, CA

Re: Разобраться с индексами, как?

Post by Pingvin »

A. Fig Lee wrote:Ну какой SQL на Новый Год, если подумать? :pain1:


А я не хочу проблемы в Новый Год переносить, лучше их на кого-нибудь переложить :).
Можем оставить обсуждение на опохмел.
User avatar
Dmitry67
Уже с Приветом
Posts: 28294
Joined: 29 Aug 2000 09:01
Location: SPB --> Gloucester, MA, US --> SPB --> Paris

Re: Разобраться с индексами, как?

Post by Dmitry67 »

Pingvin wrote:Есть database на MS SQL 2000, некоторые запросы работают медленно. Как понять, какие индексы нужно добавить, чтобы ускороть работу запросов?


Заплатить хорошему специалисту
Зарегистрированный нацпредатель, удостоверение N 19719876044787 от 22.09.2014
Rolandas
Новичок
Posts: 23
Joined: 13 Sep 2002 20:23
Location: Vilnius, Lithuania

Re: Разобраться с индексами, как?

Post by Rolandas »

Dmitry67 wrote:
Pingvin wrote:Есть database на MS SQL 2000, некоторые запросы работают медленно. Как понять, какие индексы нужно добавить, чтобы ускороть работу запросов?


Заплатить хорошему специалисту


А может сначала запустить Index Tuning Wizard из Enterprise Manager?
User avatar
Pingvin
Уже с Приветом
Posts: 660
Joined: 22 Jan 2001 10:01
Location: North Bay, CA

Re: Разобраться с индексами, как?

Post by Pingvin »

Rolandas wrote:
А может сначала запустить Index Tuning Wizard из Enterprise Manager?

Когда я запускаю Index Tuning Wizard (проверяю при этом файл, содержащий все queries), то получаю ошибку: "The server returned an error attempting to either create a temporary table or index statistics."
Я подключаюсь к базе как dbo, так что тут не должно быть никаких проблем, тем более, что создать индексы из Enterprise Manager я могу.
На что можно еще посмотреть?
Rolandas
Новичок
Posts: 23
Joined: 13 Sep 2002 20:23
Location: Vilnius, Lithuania

Re: Разобраться с индексами, как?

Post by Rolandas »

Pingvin wrote:Когда я запускаю Index Tuning Wizard (проверяю при этом файл, содержащий все queries), то получаю ошибку: "The server returned an error attempting to either create a temporary table or index statistics."
Я подключаюсь к базе как dbo, так что тут не должно быть никаких проблем, тем более, что создать индексы из Enterprise Manager я могу.
На что можно еще посмотреть?

В именах таблиц имеются не только латинские буквы?
Не все таблицы owned by dbo?
И вообще, лучше ему дать настоящий workload.
Смотри Index Tuning Wizard Best Practices:
http://support.microsoft.com/default.as ... -us;311826
zVlad
Уже с Приветом
Posts: 15311
Joined: 30 Apr 2003 16:43

Re: Разобраться с индексами, как?

Post by zVlad »

Pingvin wrote:Есть database на MS SQL 2000, некоторые запросы работают медленно. Как понять, какие индексы нужно добавить, чтобы ускороть работу запросов?


Правильная модель данных и индексы на вторичных ключах (имея в виду что индексы на первичных созданы автоматически) решают львиную долю проблем производительности.
Дополнительные индексы (нужда в которых есть явный признак недостатков модели данных) конструируются на основе анализа конкретных проблематичных запросов, которые в свою очередь выявляются либо на основе измерения потребляемых ресурсов и/или времени ответа, а лучше с помощью анализа планов доступа.
Насколько я знаю в SQL имеется доступ к параметрам плана доступа. Добавьте к этому знания и здравый смысл, и я думаю, никакие Wizard-ы Вам не нужны.
User avatar
Pingvin
Уже с Приветом
Posts: 660
Joined: 22 Jan 2001 10:01
Location: North Bay, CA

Re: Разобраться с индексами, как?

Post by Pingvin »

zVlad wrote:
Pingvin wrote:Есть database на MS SQL 2000, некоторые запросы работают медленно. Как понять, какие индексы нужно добавить, чтобы ускороть работу запросов?


Правильная модель данных и индексы на вторичных ключах (имея в виду что индексы на первичных созданы автоматически) решают львиную долю проблем производительности.
Дополнительные индексы (нужда в которых есть явный признак недостатков модели данных) конструируются на основе анализа конкретных проблематичных запросов, которые в свою очередь выявляются либо на основе измерения потребляемых ресурсов и/или времени ответа, а лучше с помощью анализа планов доступа.
Насколько я знаю в SQL имеется доступ к параметрам плана доступа. Добавьте к этому знания и здравый смысл, и я думаю, никакие Wizard-ы Вам не нужны.


Спасибо, это я сделаю. Чувствую, что проблема у меня не в индексах, а вернее не только в них.
Дело в том, что задержка происходит на уровне испольнения функции. Когда образуем primary key, мы берем уникальный номер и добавляем к нему 12 цифр, представляющих собой дату и время, в которое добавляется запись, а затем добавляется трехбуквенный код оператора. Так как часть данных была создана до этой системы, то у них этот идентификатор представляет собой число + "matched". Фунция, представленная ниже, берет идентификатор и возвращает дату и время добавления функции или "н/а". Большинство запросов использует это число в дальнейшем.

SET QUOTED_IDENTIFIER ON
GO
SET ANSI_NULLS ON
GO

create function dbo.DateTimeAdded(@Item as varchar(50) )
RETURNS VARCHAR(50)
WITH SCHEMABINDING
AS
BEGIN
declare @dta as varchar(50)
if len(@Item)<8 or @Item like '%matched'
set @dta= 'n/a'
else
set @dta= LEFT(RIGHT(RIGHT(LEFT(@Item, LEN(@Item) - 3), 14), 8 ), 2) + '/' + LEFT(RIGHT(RIGHT(LEFT(@Item, LEN(@Item)- 3), 14), 6), 2) + '/' + RIGHT(RIGHT(LEFT(@Item, LEN(@Item)- 3), 14), 4) + ' ' + LEFT(RIGHT(LEFT(@Item, LEN(@Item)- 3), 14), 2)+ ':' + RIGHT(LEFT(RIGHT(LEFT(@Item, LEN(@Item)- 3), 14), 4), 2) + ':' + RIGHT(LEFT(RIGHT(LEFT(@Item, LEN(@Item)- 3), 14), 6), 2)
return @dta
end

GO
SET QUOTED_IDENTIFIER OFF
GO
SET ANSI_NULLS ON
GO

Return to “Вопросы и новости IT”