powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / При размещении базы на сетевом диске ODBC не видит индексов
16 сообщений из 16, страница 1 из 1
При размещении базы на сетевом диске ODBC не видит индексов
    #35201273
kiruha
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Работаю с 1С через VFPOLEDB (ДБФ+CDX).
Сейчас понадобилось еще и через ODBC - для использования приложений не работающих через OLE.

Строка подключения |DRIVER=Microsoft Visual FoxPro Driver;
|Deleted=Yes;
|Null=No;
|Collate=Machine;
|BackgroundFetch=No;
|Exclusive=No;
|SourceType=DBF;
|SourceDB=P:\Тест"
Пока файлы базы лежат локально - все ОК - при попадании в индекс - включается оптимизация.
Как только файлы располагаю на другом компьютере - оптимизация
отключается напрочь - что попал в индекс, что не попал - без разницы.
При работе через VFPOLEDB - все ОК, индексы видны, оптимизация происходит и в сетевом
и локальном вариантах.

Может дело в каких то настройках - все просмотрел - ничего нет.
Видел сообщения что ODBC не использует CDX - но судя по замерам в локальном варианте явно происходит оптимизация.
...
Рейтинг: 0 / 0
При размещении базы на сетевом диске ODBC не видит индексов
    #35202511
Mdel
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
ODBC cdx использует однозначно, сам проверял. И на сетевом диске тоже их лопает.

P.S. А как ты опеределил что индексы видны через VFPOLEDB ?
...
Рейтинг: 0 / 0
При размещении базы на сетевом диске ODBC не видит индексов
    #35203053
kiruha
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Тестирую простейший запрос к таблице Номенклатуры
1 | SELECT
|
|СпрНом.id
|
|FROM SC33 as СпрНом
| WHERE СпрНом.id =' 1SA'
(По полю id индекс в SC33 ) несколько тестов с разными вариантами вместо ' 1SA'

И тот же самый с небольшой поправкой, чтобы не было попадания в индекс
2 | SELECT
|
|СпрНом.id
|
|FROM SC33 as СпрНом
| WHERE СпрНом.id+' ' =' 1SA'+' '
(добавляю ' ' в предложении WHERE)

Для OLEDB вариант 1 0.003 сек
вариант 2 0.202с сек т.е. 700 раз дольше

для ODBC
вариант 1 0.315 сек
вариант 2 0.316 сек т.е. нет разницы

Если делать полную выборку, то ODBC только 1.5 уступает OLEDB

Насчет того что локально видит - ОШИБКА, не видит также. просто с локального диска быстрый доступ.
Индексы созданы в 1С - но видны OLEDB
...
Рейтинг: 0 / 0
При размещении базы на сетевом диске ODBC не видит индексов
    #35203082
kiruha
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Поправка - не в 700 а в 70 раз больше.
Таблица небольшая - около 4000 записей.

Индексы также видны если таблицу открывать VFP : сортировка Machine ,
тип Regular , Filter .Not.Deleted(), Expression id
...
Рейтинг: 0 / 0
При размещении базы на сетевом диске ODBC не видит индексов
    #35203250
kiruha
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Методом тыка выяснилось, что если в дизайнере таблицы
убрать Filter .NOT.DELETED(), то ODBC начинает использовать индексы
если опять добавить - прекращает.

Фильтры я отключить не могу - индексы создает и перестраивает 1С.

Может можно как то отключить использование этих фильтров в ODBC?
...
Рейтинг: 0 / 0
При размещении базы на сетевом диске ODBC не видит индексов
    #35203270
PaulWist
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
kiruhaМетодом тыка выяснилось, что если в дизайнере таблицы
убрать Filter .NOT.DELETED(), то ODBC начинает использовать индексы
если опять добавить - прекращает.

Фильтры я отключить не могу - индексы создает и перестраивает 1С.

Может можно как то отключить использование этих фильтров в ODBC?

Фильтрованные индексы таково вида не используются в оптимизации - медицинский факт.

авторIndexing Effectively for Rushmore Query Optimization
Rushmore cannot take advantage of all indexes. If you use a FOR clause in the INDEX command, Rushmore cannot use the index for optimization. For example, because it contains a FOR clause, this statement cannot be optimized, INDEX ON ORDNUM FOR DISCOUNT > 10 TAG ORDDISC.

Similarly, Rushmore cannot use an index created with a NOT condition. For example, the this expression can be optimized, INDEX ON DELETED() TAG DEL, But this one cannot, INDEX ON NOT DELETED() TAG NOTDEL.

In the special case that you want to exclude delete records from a query, using an index, as in the first example earlier, will speed up operations when you've set SET DELETED to ON.

Надо переделать индексы хотя бы без NOT, либо создать новые.
...
Рейтинг: 0 / 0
При размещении базы на сетевом диске ODBC не видит индексов
    #35203378
kiruha
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
PaulWist kiruhaМетодом тыка выяснилось, что если в дизайнере таблицы
убрать Filter .NOT.DELETED(), то ODBC начинает использовать индексы
если опять добавить - прекращает.

Фильтры я отключить не могу - индексы создает и перестраивает 1С.

Может можно как то отключить использование этих фильтров в ODBC?

Фильтрованные индексы таково вида не используются в оптимизации - медицинский факт.

авторIndexing Effectively for Rushmore Query Optimization
Rushmore cannot take advantage of all indexes. If you use a FOR clause in the INDEX command, Rushmore cannot use the index for optimization. For example, because it contains a FOR clause, this statement cannot be optimized, INDEX ON ORDNUM FOR DISCOUNT > 10 TAG ORDDISC.

Similarly, Rushmore cannot use an index created with a NOT condition. For example, the this expression can be optimized, INDEX ON DELETED() TAG DEL, But this one cannot, INDEX ON NOT DELETED() TAG NOTDEL.

In the special case that you want to exclude delete records from a query, using an index, as in the first example earlier, will speed up operations when you've set SET DELETED to ON.

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

Я приводил тесты - VFPOLEDB использует индексы с таким фильтром очень даже хорошо.
Более того, это проверено на живой базе и уже не один месяц.
Но VFPOLEDB от 9.0

Цитата же кажется из Visual FoxPro 8.0 - но так как драйвер ODBC на microsoft.com от 1999,
то видимо поэтому и не может работать....
...
Рейтинг: 0 / 0
При размещении базы на сетевом диске ODBC не видит индексов
    #35203412
PaulWist
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
kiruhaЯ приводил тесты - VFPOLEDB использует индексы с таким фильтром очень даже хорошо.
Более того, это проверено на живой базе и уже не один месяц.
Но VFPOLEDB от 9.0

Цитата же кажется из Visual FoxPro 8.0 - но так как драйвер ODBC на microsoft.com от 1999,
то видимо поэтому и не может работать....

Цитата взята из зхелпа 9-ого фокса.

Проверьте

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
?SET('deleted')

CREATE CURSOR test (f1 i)

INDEX ON f1 TAG f1 FOR !deleted()

INSERT INTO test VALUES ( 1 )

?SYS( 3054 , 11 )

SET DELETED OFF 
SELECT * FROM test WHERE f1 =  2 

SET DELETED ON 
SELECT * FROM test WHERE f1 =  2 
...
Рейтинг: 0 / 0
При размещении базы на сетевом диске ODBC не видит индексов
    #35203701
kiruha
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
PaulWist

Проверьте

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
?SET('deleted')

CREATE CURSOR test (f1 i)

INDEX ON f1 TAG f1 FOR !deleted()

INSERT INTO test VALUES ( 1 )

?SYS( 3054 , 11 )

SET DELETED OFF 
SELECT * FROM test WHERE f1 =  2 

SET DELETED ON 
SELECT * FROM test WHERE f1 =  2 

Запустил в Fox - все строчки отрабатывается .
В чем смысл проверки - не понял.
...
Рейтинг: 0 / 0
При размещении базы на сетевом диске ODBC не видит индексов
    #35203737
PaulWist
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
kiruhaЗапустил в Fox - все строчки отрабатывается .
В чем смысл проверки - не понял.

В том, что при установке set deleted off, Rushmore не используется для фильтрованных индексов.
...
Рейтинг: 0 / 0
При размещении базы на сетевом диске ODBC не видит индексов
    #35203773
kiruha
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
В одном случае FULL
Во втором none

Тем не менее OLEDB оптимизацию использует. Это выяснено достаточно
давно и используется еще в нескольких базах других людей.
...
Рейтинг: 0 / 0
При размещении базы на сетевом диске ODBC не видит индексов
    #35203823
mvictor
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
попробуйте в таблицу где есть индекс с условием for !deleted() добавить еще и индекс deleted()
...
Рейтинг: 0 / 0
При размещении базы на сетевом диске ODBC не видит индексов
    #35203849
kiruha
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
PaulWist kiruhaЗапустил в Fox - все строчки отрабатывается .
В чем смысл проверки - не понял.

В том, что при установке set deleted off, Rushmore не используется для фильтрованных индексов.

Супер :)
Означает ли это что при SET DELETED ON оптимизация ODBC заработает?

В OLEDB можно послать команду
EXECSCRIPT('SET DELETED ON ')
в ODBC видимого влияния команды не происходит.
...
Рейтинг: 0 / 0
При размещении базы на сетевом диске ODBC не видит индексов
    #35203922
PaulWist
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Нет, ODBC со времен 6-ки не изменялся, поэтому для ODBC фильтрованные индексы не оптимизируются в принципе.
...
Рейтинг: 0 / 0
При размещении базы на сетевом диске ODBC не видит индексов
    #35204037
kiruha
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
PaulWistНет, ODBC со времен 6-ки не изменялся, поэтому для ODBC фильтрованные индексы не оптимизируются в принципе.

Да, запустил SET DELETED ON в ODBC через хранимую процедуру -
результат не изменился.
Похоже что действительно в принципе не оптимизирует фильтрованные ...

А индексы вручную менять нельзя - их 1С все равно периодически перестраивает под себя.
...
Рейтинг: 0 / 0
При размещении базы на сетевом диске ODBC не видит индексов
    #35204070
PaulWist
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Используй OLEDB, либо СОМ-сервер саомго 1С
...
Рейтинг: 0 / 0
16 сообщений из 16, страница 1 из 1
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / При размещении базы на сетевом диске ODBC не видит индексов
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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