powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / Как заставить select использовать индексы
12 сообщений из 12, страница 1 из 1
Как заставить select использовать индексы
    #33209079
select index
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Выполняю запрос из внешней программы к файлам dbf, через vfpoledb 9.0
провайдер. Записей в таблице много, около 500000, запрос выполняеться достаточно долго. Сделал запрос к дбф-у без индексного файла время что с индексом что без него одинаковое. Может кто-нибудь сталкивался с подобным ?
...
Рейтинг: 0 / 0
Как заставить select использовать индексы
    #33209090
Фотография Анатолий Широков
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Запрос какой и какие индексы есть? Структурные ли они?
...
Рейтинг: 0 / 0
Как заставить select использовать индексы
    #33209094
select index
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Запрос простенький
select accdtid,accktid
from 1sentry
where docid = ' 31P4 '
индексы стркутрные
индексируемые поля docid, number
number в запросе не используется
...
Рейтинг: 0 / 0
Как заставить select использовать индексы
    #33209113
PaulWist
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Переделай выражение индекса на, например

INDEX ON PADR(docid,100) TAG docid

тогда в выраджении WHERE PADR(docid) = ' 31P4 '

и посмотри http://www.foxclub.ru/articles/index.php?id=35
...
Рейтинг: 0 / 0
Как заставить select использовать индексы
    #33209120
PaulWist
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ошибочка-поправочка

WHERE PADR(docid) = PADR('31P4',100) , те выражение слева и справо д.б. одинаковыми.
...
Рейтинг: 0 / 0
Как заставить select использовать индексы
    #33209130
select index
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Беда в том что индексный файл используеться другой программой соответсвенно он должен оставаться таким каким он есть. Если файл поменять то программа не сможет с ним работать.
Может есть в Foxpro какая нибудь команда или расширение указывающая что в SQL запросе должен использоваться определенный индекс.
...
Рейтинг: 0 / 0
Как заставить select использовать индексы
    #33209144
PaulWist
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Тогда создай свой (дополнительный) индекс, таким образом оптимизатор будет его подцеплять для выборки
...
Рейтинг: 0 / 0
Как заставить select использовать индексы
    #33209193
Фотография ВладимирМ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Нет. Индекс по PADR() здесь вообще не при чем.

В какой кодовой странице созданы DBF-таблицы? Можно проверить в среде FoxPro командой

?CPDBF()

В какой сортировке создан индекс по полю docid? Имеется в виду SET COLLATE. Можно проверить командой

?IDXCOLLATE()

Если что-то из этих настроек отлично от текущей настройки среды, то индекс использовать НЕ будет.

Впрочем, это все относилось к самой среде FoxPro. Как оно будет при работе через OLE я не в курсе. Никогда не работал.
...
Рейтинг: 0 / 0
Как заставить select использовать индексы
    #33209339
Sergey Ch
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Как правильно указал Владимир - в VFP 9.0 отключается автоматически оптимизация запроса, если кодовые страницы индексов и кажется (?) среды не совпадают...

Лечение - пересоздание всего в версии 9.0 с правильной кодовой страницей (или возврат на 8.0)...

Тему эту мы где-то уже подробно обсуждали - воспользуйтесь поиском...
...
Рейтинг: 0 / 0
Как заставить select использовать индексы
    #33210102
PaulWist
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ВладимирМ

Обращаю внимание на выражение которое ищется

docid = ' 31P4 '

те = апостроф - пробел - 31P4 - пробел - апостроф, если это только не сделано для читабельности текста, а как в табличку записываются данные мы не знаем, то и кодовая страница не сильно поможет.
...
Рейтинг: 0 / 0
Как заставить select использовать индексы
    #33210591
Фотография ВладимирМ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
PaulWist

Я специально разбирался со способом сравнения символьных строк в команде Select-SQL. Т.е. это настройка SET ANSI

Так вот. Есть 2 варианта сравнения:

1. SET ANSI OFF (или оператор тождественного равенства) - мЕньшее (по количеству символов) выражение дополняется пробелами до тех пор, пока не сравняется по длине с бОльшим

docid = ' 31P4 '

Предположим, что docid - это C(100), значит ' 31P4 ' автоматически будет дополнено пробелами справа до 100 символов. По сути - получим то же самое PADR(), но в не явном виде

docid = PADR(' 31P4 ',100)

2. SET ANSI ON - бОльшее выражение будет обрезано справа (отброшена концевая часть) с тем, чтобы уравняться по длине с мЕньшим выражением

docid = ' 31P4 '

Предположим, что docid - это C(100), а ' 31P4 ' - это 6 символов. Значит, автоматически будет обрезано значение поля docid до тех же 6 символов. По сути - получим LEFT(docid,6), но в неявном виде

LEFT(docid,6) = ' 31P4 '

Т.е. вне зависимости от текущей настройки SET ANSI будет сравнение на тот факт, что первыми символами в поле docid является указанная комбинация символов ' 31P4 '.

А настройка SET ANSI уточняет - будут ли найденные записи оканчиваться только пробелами или кроме пробелов на конце могут быть и другие символы.

Это все замечательно, но в данном случае вопрос был связан вовсе не со способом сравнения символьных строк, а с фактом использования или НЕ использования индекса по полю docid. Т.е. к основному вопросу все это отношения не имеет.
...
Рейтинг: 0 / 0
Как заставить select использовать индексы
    #33210677
PaulWist
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ВладимирМ

ВладимирМ Т.е. к основному вопросу все это отношения не имеет.

Владимир, правильно - это я тормознул с недосыпу.
...
Рейтинг: 0 / 0
12 сообщений из 12, страница 1 из 1
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / Как заставить select использовать индексы
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]