|
|
|
При размещении базы на сетевом диске ODBC не видит индексов
|
|||
|---|---|---|---|
|
#18+
Работаю с 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 - но судя по замерам в локальном варианте явно происходит оптимизация. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.03.2008, 17:01 |
|
||
|
При размещении базы на сетевом диске ODBC не видит индексов
|
|||
|---|---|---|---|
|
#18+
ODBC cdx использует однозначно, сам проверял. И на сетевом диске тоже их лопает. P.S. А как ты опеределил что индексы видны через VFPOLEDB ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.03.2008, 10:13 |
|
||
|
При размещении базы на сетевом диске ODBC не видит индексов
|
|||
|---|---|---|---|
|
#18+
Тестирую простейший запрос к таблице Номенклатуры 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 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.03.2008, 12:19 |
|
||
|
При размещении базы на сетевом диске ODBC не видит индексов
|
|||
|---|---|---|---|
|
#18+
Поправка - не в 700 а в 70 раз больше. Таблица небольшая - около 4000 записей. Индексы также видны если таблицу открывать VFP : сортировка Machine , тип Regular , Filter .Not.Deleted(), Expression id ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.03.2008, 12:29 |
|
||
|
При размещении базы на сетевом диске ODBC не видит индексов
|
|||
|---|---|---|---|
|
#18+
Методом тыка выяснилось, что если в дизайнере таблицы убрать Filter .NOT.DELETED(), то ODBC начинает использовать индексы если опять добавить - прекращает. Фильтры я отключить не могу - индексы создает и перестраивает 1С. Может можно как то отключить использование этих фильтров в ODBC? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.03.2008, 13:07 |
|
||
|
При размещении базы на сетевом диске ODBC не видит индексов
|
|||
|---|---|---|---|
|
#18+
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, либо создать новые. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.03.2008, 13:13 |
|
||
|
При размещении базы на сетевом диске ODBC не видит индексов
|
|||
|---|---|---|---|
|
#18+
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, то видимо поэтому и не может работать.... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.03.2008, 13:43 |
|
||
|
При размещении базы на сетевом диске ODBC не видит индексов
|
|||
|---|---|---|---|
|
#18+
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. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.03.2008, 13:53 |
|
||
|
При размещении базы на сетевом диске ODBC не видит индексов
|
|||
|---|---|---|---|
|
#18+
PaulWist Проверьте Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. Запустил в Fox - все строчки отрабатывается . В чем смысл проверки - не понял. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.03.2008, 14:56 |
|
||
|
При размещении базы на сетевом диске ODBC не видит индексов
|
|||
|---|---|---|---|
|
#18+
kiruhaЗапустил в Fox - все строчки отрабатывается . В чем смысл проверки - не понял. В том, что при установке set deleted off, Rushmore не используется для фильтрованных индексов. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.03.2008, 15:05 |
|
||
|
При размещении базы на сетевом диске ODBC не видит индексов
|
|||
|---|---|---|---|
|
#18+
В одном случае FULL Во втором none Тем не менее OLEDB оптимизацию использует. Это выяснено достаточно давно и используется еще в нескольких базах других людей. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.03.2008, 15:12 |
|
||
|
При размещении базы на сетевом диске ODBC не видит индексов
|
|||
|---|---|---|---|
|
#18+
попробуйте в таблицу где есть индекс с условием for !deleted() добавить еще и индекс deleted() ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.03.2008, 15:22 |
|
||
|
При размещении базы на сетевом диске ODBC не видит индексов
|
|||
|---|---|---|---|
|
#18+
PaulWist kiruhaЗапустил в Fox - все строчки отрабатывается . В чем смысл проверки - не понял. В том, что при установке set deleted off, Rushmore не используется для фильтрованных индексов. Супер :) Означает ли это что при SET DELETED ON оптимизация ODBC заработает? В OLEDB можно послать команду EXECSCRIPT('SET DELETED ON ') в ODBC видимого влияния команды не происходит. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.03.2008, 15:27 |
|
||
|
При размещении базы на сетевом диске ODBC не видит индексов
|
|||
|---|---|---|---|
|
#18+
Нет, ODBC со времен 6-ки не изменялся, поэтому для ODBC фильтрованные индексы не оптимизируются в принципе. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.03.2008, 15:44 |
|
||
|
При размещении базы на сетевом диске ODBC не видит индексов
|
|||
|---|---|---|---|
|
#18+
PaulWistНет, ODBC со времен 6-ки не изменялся, поэтому для ODBC фильтрованные индексы не оптимизируются в принципе. Да, запустил SET DELETED ON в ODBC через хранимую процедуру - результат не изменился. Похоже что действительно в принципе не оптимизирует фильтрованные ... А индексы вручную менять нельзя - их 1С все равно периодически перестраивает под себя. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.03.2008, 16:12 |
|
||
|
|

start [/forum/topic.php?fid=41&msg=35204070&tid=1588011]: |
0ms |
get settings: |
7ms |
get forum list: |
19ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
68ms |
get topic data: |
12ms |
get forum data: |
3ms |
get page messages: |
66ms |
get tp. blocked users: |
2ms |
| others: | 200ms |
| total: | 383ms |

| 0 / 0 |
