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

Программирование на Атлантисе (VIP, FCOM, ARD), FastReport

Модераторы: m0p3e, edward_K, Модераторы

Ответить
hope
Местный житель
Сообщения: 1353
Зарегистрирован: 29 мар 2005, 17:49
Контактная информация:

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

Сообщение hope »

Добрый день!

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

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

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

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

Поскажите: что я делаю неправильно?
Seybukan
Местный житель
Сообщения: 1357
Зарегистрирован: 29 мар 2005, 17:49
Откуда: СПб, ЭП-Аудит
Контактная информация:

Сообщение Seybukan »

В запросе индекс явно пробовали задать?
hope
Местный житель
Сообщения: 1353
Зарегистрирован: 29 мар 2005, 17:49
Контактная информация:

Сообщение hope »

Нет не пробовали. Как в запросе явно задать индексы?

Вот мой запрос:
SELECT *
FROM HDR_PS
WHERE (( '05/2005 П1-1(ПЛЕМЕН.КУРЫ,УТКИ,ИНД,ГУСИ,ЦЕС.) 833П-11987'==HDR_PS.Name
and '833П-11987'==HDR_PS.DocCode
))
;
Seybukan
Местный житель
Сообщения: 1357
Зарегистрирован: 29 мар 2005, 17:49
Откуда: СПб, ЭП-Аудит
Контактная информация:

Сообщение Seybukan »

во как:
SELECT *
FROM HDR_PS (название индекса)
WHERE (( '05/2005 П1-1(ПЛЕМЕН.КУРЫ,УТКИ,ИНД,ГУСИ,ЦЕС.) 833П-11987'==HDR_PS.Name
and '833П-11987'==HDR_PS.DocCode
))
;
stray
Постоянный гость
Сообщения: 90
Зарегистрирован: 29 мар 2005, 17:49

Сообщение stray »

напр:
FROM HDR_PS (HDR_PS04)
Max_Fin
На пенсии
Сообщения: 797
Зарегистрирован: 29 мар 2005, 17:49
Откуда: г. Тюмень
Контактная информация:

Сообщение 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)
))
;
hope
Местный житель
Сообщения: 1353
Зарегистрирован: 29 мар 2005, 17:49
Контактная информация:

Сообщение 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 уникально.
Может быть есть какой-то другой вариант запроса?
Max_Fin
На пенсии
Сообщения: 797
Зарегистрирован: 29 мар 2005, 17:49
Откуда: г. Тюмень
Контактная информация:

Сообщение 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)
));
hope
Местный житель
Сообщения: 1353
Зарегистрирован: 29 мар 2005, 17:49
Контактная информация:

Сообщение hope »

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

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