Страница 1 из 1

Индексы для таблицы HDR_PS

Добавлено: 06 июн 2005, 15:58
hope
Добрый день!

Версия 7.12.
Таблица HDR_PS содержит шапку производственных спецификаций изделий.
Нужно проверить: есть ли в этой таблице производственная спецификация с определенным кодом (поле DocCode) и определенным наименованием (поле Name). Индексы по этим двум полям есть:
12: Name+DocCode
13: DocCode+Name.
Но при настройке потока, SUPPORT ругается: Нужен ключ DocCode+Name для HDR_PS.

Вопрос: чего не хватает?

Посмотрела как настроены индексы. Оба этих поля имеют атрибуты: Мод. В.Рег. Может это как-то влияет?

Пробовала настроить поток с использованием других подходящих индексов (содержащих эти два поля) - та же беда.

Поскажите: что я делаю неправильно?

Добавлено: 06 июн 2005, 16:02
Seybukan
В запросе индекс явно пробовали задать?

Добавлено: 06 июн 2005, 16:22
hope
Нет не пробовали. Как в запросе явно задать индексы?

Вот мой запрос:
SELECT *
FROM HDR_PS
WHERE (( '05/2005 П1-1(ПЛЕМЕН.КУРЫ,УТКИ,ИНД,ГУСИ,ЦЕС.) 833П-11987'==HDR_PS.Name
and '833П-11987'==HDR_PS.DocCode
))
;

Добавлено: 06 июн 2005, 16:45
Seybukan
во как:
SELECT *
FROM HDR_PS (название индекса)
WHERE (( '05/2005 П1-1(ПЛЕМЕН.КУРЫ,УТКИ,ИНД,ГУСИ,ЦЕС.) 833П-11987'==HDR_PS.Name
and '833П-11987'==HDR_PS.DocCode
))
;

Добавлено: 06 июн 2005, 16:45
stray
напр:
FROM HDR_PS (HDR_PS04)

Добавлено: 06 июн 2005, 17:52
Max_Fin
Тут ситуция такая, что длина используемого индекса больше, чем можно использовать, выкрутиться можно например так:

Код: Выделить всё

SELECT Name, DocCode
FROM HDR_PS
WHERE
((
   '05/2005 П1-1(ПЛЕМЕН.КУРЫ,УТКИ,ИНД,ГУСИ,ЦЕС.) 833П-11987' == HDR_PS.Name and
    '833П-11987' == HDR_PS.DocCode (NoIndex)
))
;

Добавлено: 07 июн 2005, 08:56
hope
Спасибо всем за помощь!

Да, явное указание индекса не помогает - результат тот же.

Приведенным ниже образом - работает:
SELECT *
FROM HDR_PS
WHERE (('05/2005 П1-1(ПЛЕМЕН.КУРЫ,УТКИ,ИНД,ГУСИ,ЦЕС.) 833П-11987'==HDR_PS.Name
and '833П-11987'==HDR_PS.DocCode (NoIndex)
))
;

НО выдается сообщение: "Не могу подобрать индекс не усекая по умолчанию ключ для таблицы HDR_PS". Как-то возможно подавить в интерфейсе это сообщение?

В принципе у нас в базе и DocCode уникально, и Name уникально.
Может быть есть какой-то другой вариант запроса?

Добавлено: 07 июн 2005, 10:40
Max_Fin
Индексы описаны таким образом:

Код: Выделить всё

Hdr_PS21  =  Name(Length=20) + DocCode(Length=20),
Hdr_PS22  =  DocCode(Length=20) + Name(Length=20)
Поэтому наиболее приемлимое использование данного индекса

Код: Выделить всё

SELECT *
FROM HDR_PS
WHERE (('05/2005 П1-1(ПЛЕМЕН.КУРЫ,УТКИ,ИНД,ГУСИ,ЦЕС.) 833П-11987'==HDR_PS.Name (LENGTH = 20)
and '833П-11987'==HDR_PS.DocCode (LENGTH = 20)
));
но при этом можно получить "лишнии" записи
если это не устроит тогда воспользоваться самым плохим вариантом

Код: Выделить всё

SELECT *
FROM HDR_PS
WHERE (('05/2005 П1-1(ПЛЕМЕН.КУРЫ,УТКИ,ИНД,ГУСИ,ЦЕС.) 833П-11987'==HDR_PS.Name (Noindex)
and '833П-11987'==HDR_PS.DocCode (Noindex)
));

Добавлено: 08 июн 2005, 08:20
hope
Спасибо, Max_Fin, так действительно работает (с (LENGTH = 20)).

Все-таки что-то намудрили разработчики с индексами - интерфейс с производственными спецификациями открывается жутко медленно....