Индексы для таблицы HDR_PS
Модераторы: m0p3e, edward_K, Модераторы
Индексы для таблицы HDR_PS
Добрый день!
Версия 7.12.
Таблица HDR_PS содержит шапку производственных спецификаций изделий.
Нужно проверить: есть ли в этой таблице производственная спецификация с определенным кодом (поле DocCode) и определенным наименованием (поле Name). Индексы по этим двум полям есть:
12: Name+DocCode
13: DocCode+Name.
Но при настройке потока, SUPPORT ругается: Нужен ключ DocCode+Name для HDR_PS.
Вопрос: чего не хватает?
Посмотрела как настроены индексы. Оба этих поля имеют атрибуты: Мод. В.Рег. Может это как-то влияет?
Пробовала настроить поток с использованием других подходящих индексов (содержащих эти два поля) - та же беда.
Поскажите: что я делаю неправильно?
Версия 7.12.
Таблица HDR_PS содержит шапку производственных спецификаций изделий.
Нужно проверить: есть ли в этой таблице производственная спецификация с определенным кодом (поле DocCode) и определенным наименованием (поле Name). Индексы по этим двум полям есть:
12: Name+DocCode
13: DocCode+Name.
Но при настройке потока, SUPPORT ругается: Нужен ключ DocCode+Name для HDR_PS.
Вопрос: чего не хватает?
Посмотрела как настроены индексы. Оба этих поля имеют атрибуты: Мод. В.Рег. Может это как-то влияет?
Пробовала настроить поток с использованием других подходящих индексов (содержащих эти два поля) - та же беда.
Поскажите: что я делаю неправильно?
-
- На пенсии
- Сообщения: 797
- Зарегистрирован: 29 мар 2005, 17:49
- Откуда: г. Тюмень
- Контактная информация:
Тут ситуция такая, что длина используемого индекса больше, чем можно использовать, выкрутиться можно например так:
Код: Выделить всё
SELECT Name, DocCode
FROM HDR_PS
WHERE
((
'05/2005 П1-1(ПЛЕМЕН.КУРЫ,УТКИ,ИНД,ГУСИ,ЦЕС.) 833П-11987' == HDR_PS.Name and
'833П-11987' == HDR_PS.DocCode (NoIndex)
))
;
Спасибо всем за помощь!
Да, явное указание индекса не помогает - результат тот же.
Приведенным ниже образом - работает:
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 уникально.
Может быть есть какой-то другой вариант запроса?
Да, явное указание индекса не помогает - результат тот же.
Приведенным ниже образом - работает:
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 уникально.
Может быть есть какой-то другой вариант запроса?
-
- На пенсии
- Сообщения: 797
- Зарегистрирован: 29 мар 2005, 17:49
- Откуда: г. Тюмень
- Контактная информация:
Индексы описаны таким образом:
Поэтому наиболее приемлимое использование данного индекса
но при этом можно получить "лишнии" записи
если это не устроит тогда воспользоваться самым плохим вариантом
Код: Выделить всё
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)
));