Индекс
Релиб
Форумы       Участники    Календарь    Кто он-лайн?
Добро пожаловать, гость ( Вход | Регистрация )
        



Индекс Expand / Collapse
Автор
Сообщение
30.11.2006 16:05
Supreme Being

Supreme BeingSupreme BeingSupreme BeingSupreme BeingSupreme BeingSupreme BeingSupreme BeingSupreme Being

участник
Last Login: 06.07.2008 10:37
Сообщ.: 236, Visits: 1 734
Вобщем дело в следующем:

Есть у меня приложение, написанное в ACCESS. БД в которой одна из таблиц имеет около 2 млн. записей. И запрос на поиск по этой таблице по полю F1 - тип которого Текст, длина - 8. и полю F2 - тип Текст, длина - 8. Плюс объединения с еще тремя таблицами для дополнительной информации.

Поля F1 и F2 индексированные по отдельности, с возможностью повторов. Так вот, запрос этот выводит инфу мгновенно ( ну, скажем менее 1 сек. )

Перевожу эту систему на SQL Server 2k sp4, и там этот же запрос выполняется от 4 до 7 сек. Поля объединены в один индекс.

Вопрос: правильно ли я настроил индексирование, а если нет то как правильно это делать? Когда лучше объединять поля в один индекс, а когда лучше по отдельности индексировать? Да и есть ли разница? Не может же быть чтобы ACCESS работал быстрее SQL Server?

Спасибо.

Сообщ. #908265
30.11.2006 16:55
Forum Member

Forum MemberForum MemberForum MemberForum MemberForum MemberForum MemberForum MemberForum Member

участник
Last Login: 27.02.2008 16:42
Сообщ.: 43, Visits: 1 569
Не может же быть чтобы ACCESS работал быстрее SQL Server?

Oчень дaже мoжет. В зaвисимoсти oт тoгo кaк хрaнятся дaнные и кaк сoстaвлен зaпрoс.
И oчень слoжнo oтветить нa Вaш вoпрoс - недoстaтoчнo инфoрмaции. В любoм случaе я не стaл бы грешить нa индексы - слишкoм уж великa рaзницa. Скoрее, прoблемa в зaпрoсе.

Пoкaжите кaк Вы сoздaете зaпрoс в SQL Server, тoгдa мoжнo будет чтo-тo скaзaть.

Сообщ. #908273
30.11.2006 17:29
Supreme Being

Supreme BeingSupreme BeingSupreme BeingSupreme BeingSupreme BeingSupreme BeingSupreme BeingSupreme Being

участник
Last Login: 06.07.2008 10:37
Сообщ.: 236, Visits: 1 734
Вот текст ХП:

ALTER     procedure dbo.S_GetDateFromBD
(
 @SerDoc as varchar(8),
 @NumDoc as varchar(8)
)
AS

BEGIN

Select  dbo.S_Strax.id_strax as strax,
 dbo.S_Work.ndog,
 dbo.S_Raion.id_raion as raion,
 dbo.S_Policy.ss as snils,
 dbo.S_Policy.fio,
 dbo.S_Sex.id_s as sex,
 dbo.S_Policy.birthday as birthday,
 dbo.S_Policy.adr,
 dbo.S_Work.id_work,
 dbo.S_Work.inn,
 dbo.S_Work.kpp,
 dbo.S_Policy.leave_date
From dbo.S_Policy
 Inner Join dbo.S_Work on ( ( dbo.S_Work.regno = dbo.S_Policy.regno) and ( dbo.S_Work.label = dbo.S_Policy.label ) )
 Inner Join dbo.S_Strax on ( dbo.S_Work.strax_cod = dbo.S_Strax.code_f )
 Inner Join dbo.S_Raion on ( dbo.S_Raion.code_r = LEFT( dbo.S_Policy.regno, 2 ) )
 Inner Join dbo.S_Sex on ( dbo.S_Sex.sex = dbo.S_Policy.sex )
Where ( dbo.S_Policy.polis_ser = @SerDoc )
 And
      ( dbo.S_Policy.polis_num = @NumDoc )

END

Запрос из ACCESS пока привести не могу. Нет под рукой, но обязательно напишу. 

Вот запрос из ACCESSa: ( Выполняется мгновенно на той-же машине )

SELECT POLICY.POLIS_SER,
           POLICY.POLIS_NUM,
           POLICY.FIO,
           POLICY.BIRTHDAY,
           sex.id_sex,
           POLICY.ADR,
           POLICY.SS,
           WORK.WORKPLACE,
           strax.NAME,
           RAION.RAION_NAME
FROM   RAION, 
          strax 
 INNER JOIN (
                  (sex INNER JOIN POLICY ON sex.sex = POLICY.SEX) 
                  INNER JOIN [WORK] ON (POLICY.REGNO = WORK.REGNO) AND (POLICY.LABEL = WORK.LABEL))
                  ON strax.CODE_F = WORK.STRAX_COD
WHERE (
            ((POLICY.POLIS_SER)=[Forms]![talon]![seria_dok])
            AND ((POLICY.POLIS_NUM)=[Forms]![talon]![num_dok])
            AND ((RAION.CODE_R)=Left([Policy].[REGNO],2))
          );

В принципе все то-же самое. Естественно все поля, учавствующие в условиях запросов индексированы. Вот только не могу понять почему ACCESS работает быстрее SQL Server'a. А время выполнения запроса очень важно, т.к. пользователи выполняют этот запрос по 1000 раз за день и простой даже в пару секунд в ожидании заполнения нужных полей сильно раздражает. ( По себе знаю :) )

Что делать?

Сообщ. #908275
01.12.2006 9:42
Supreme Being

Supreme BeingSupreme BeingSupreme BeingSupreme BeingSupreme BeingSupreme BeingSupreme BeingSupreme Being

участник
Last Login: 06.07.2008 10:37
Сообщ.: 236, Visits: 1 734
Разобрался, все таки дело в индексах, вернее в неправильном индексе. В общем в ACCESS у меня было два индекса на таблицу POLICY, один составной на серию и номер, второй на фио. А в SQL Server я почему то сделал один индекс для серии, номера и фио. Стоило их разделить и все стало летать.

Вот такие дела. В общем всем спасибо.

PS: Если кто даст ссылки на полезные ресурсы по SQL Server буду очень признателен.

Сообщ. #908294
« пред. тема | след. тема »


Эту тему читают Expand / Collapse
Посетители: 0 (0 гостей, 0 участников, 0 скрыт.участников)
Сейчас нет участников, просматривающих тему.
Модераторы: Alexey, boombastik, bazile, pl, Alexey Spirin

Время GMT +3:00, Сейчас 11:53