Страница 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)).
Все-таки что-то намудрили разработчики с индексами - интерфейс с производственными спецификациями открывается жутко медленно....