|
Автоподбор индекса в запросах
|
|||
---|---|---|---|
#18+
Использую FoxPro для доступа к 1С(ДБФ) В таблицах 1С индексы сделаны ввиде достаточно сложных выражений. Например в таблице "журнала документов" есть поле Date, но нет индекcа по этому полю, а есть индекс на выражение Код: plaintext
Соответственно, когда пишу условие в запросе 1. Код: plaintext
разница между датами 1 день. Я могу переписать условие 2. Код: plaintext
Единственная проблема очень тяжело так переписывать каждый запрос. А если условия динамические(зависят от выбора пользователя) - вообще труба. Не существует ли парсера или способа, который бы преобразовывал исходный запрос в такой, чтобы там где возможно неиндексные выражения заменялись на индексные (авто) ? ... |
|||
:
Нравится:
Не нравится:
|
|||
29.07.2008, 14:27 |
|
Автоподбор индекса в запросах
|
|||
---|---|---|---|
#18+
Нет. Компьютеры думать еще не умеют. Или подстраивайтесь под имеющиеся индексы или делайте дополнительные индексы под свои запросы. ... |
|||
:
Нравится:
Не нравится:
|
|||
29.07.2008, 14:32 |
|
Автоподбор индекса в запросах
|
|||
---|---|---|---|
#18+
kiruhaЯ могу переписать условие 2. Код: plaintext
Автоматом ни как, только подстраиваться под имеющиеся индексы, но "+Журнал.time+Журнал.iddoc" можно не дописывать думаю. ... |
|||
:
Нравится:
Не нравится:
|
|||
29.07.2008, 14:39 |
|
Автоподбор индекса в запросах
|
|||
---|---|---|---|
#18+
могу дать пример парсера Sql строки далее Вы уже самомтоятельно можете посмотреть по атагинфо сущ-е индексов, необходимых для вкл-я оптимизатора и создание их но Вам будет необходим моноп-й доступ к таблицам + уверенность, что наличие доп-х индексн.тегов не повлияет на работу 1С ... |
|||
:
Нравится:
Не нравится:
|
|||
29.07.2008, 14:40 |
|
Автоподбор индекса в запросах
|
|||
---|---|---|---|
#18+
12345вышелзайчикпогулять + уверенность, что наличие доп-х индексн.тегов не повлияет на работу 1С + уверенность что 1С не убъет дополнительные индексы. ... |
|||
:
Нравится:
Не нравится:
|
|||
29.07.2008, 14:44 |
|
Автоподбор индекса в запросах
|
|||
---|---|---|---|
#18+
проходящий.Нет. Компьютеры думать еще не умеют. Или подстраивайтесь под имеющиеся индексы или делайте дополнительные индексы под свои запросы. В самых простейших случаях я парсер написал - думал может тоже кто. SQLLite умееет подбирать индексы автоматически для CDX. Dima T kiruhaЯ могу переписать условие 2. Код: plaintext
Автоматом ни как, только подстраиваться под имеющиеся индексы, но "+Журнал.time+Журнал.iddoc" можно не дописывать думаю. Провел тесты - не использует. .......... P.S. Небольшая ошибка - в случае 2 Код: plaintext
... |
|||
:
Нравится:
Не нравится:
|
|||
29.07.2008, 15:04 |
|
Автоподбор индекса в запросах
|
|||
---|---|---|---|
#18+
12345вышелзайчикпогулятьмогу дать пример парсера Sql строки далее Вы уже самомтоятельно можете посмотреть по атагинфо сущ-е индексов, необходимых для вкл-я оптимизатора и создание их но Вам будет необходим моноп-й доступ к таблицам + уверенность, что наличие доп-х индексн.тегов не повлияет на работу 1С Это было бы крайне интересно - поэтому и завел тему... Не очень понял зачем монопольный доступ - я строку запроса преобразую к другой строке запроса.... ... |
|||
:
Нравится:
Не нравится:
|
|||
29.07.2008, 15:06 |
|
Автоподбор индекса в запросах
|
|||
---|---|---|---|
#18+
Поправка к коду для случая 2 (использование индекса). Код: plaintext
... |
|||
:
Нравится:
Не нравится:
|
|||
29.07.2008, 15:09 |
|
Автоподбор индекса в запросах
|
|||
---|---|---|---|
#18+
Dima T 12345вышелзайчикпогулять + уверенность, что наличие доп-х индексн.тегов не повлияет на работу 1С + уверенность что 1С не убъет дополнительные индексы. Добавлять новые индексы не хотелось. 1. Это увеличивает и без того огромные файлы CDX 2. В самой документации по FoxPro рекомендовано не плодить дополнительные индексы а использовать выражения (если нужны индексы DATE и DTOS(Журнал.date)+Журнал.time например) 3. Механизм требуется для разных баз и конфигураций 4. 1С не обновляет "чужие" индексы при записи. 5. При изменении конфигурации 1С убивает "чужие" индексы, даже если они прописаны в спец файле (DD) ... |
|||
:
Нравится:
Не нравится:
|
|||
29.07.2008, 15:26 |
|
Автоподбор индекса в запросах
|
|||
---|---|---|---|
#18+
Лучше обращаться к БД 1С через OLE объекты o1c = Createobject("V77.Application") .... ... |
|||
:
Нравится:
Не нравится:
|
|||
06.08.2008, 11:43 |
|
Автоподбор индекса в запросах
|
|||
---|---|---|---|
#18+
AndreyBЛучше обращаться к БД 1С через OLE объекты o1c = Createobject("V77.Application") .... Ага, сначала ждешь, пока база подымется. В зависимости от навороченности базы от секунд, до минут. Потом ждешь, пока 1С провернет то, что ты от нее хочешь. Потом ждешь, пока OLEVariant дважды конвертнувшись вернется в VFP. То что в случае прямого доступа к базе измеряется миллисекундами, через OLE тянется минутами... часами... ... |
|||
:
Нравится:
Не нравится:
|
|||
06.08.2008, 13:33 |
|
Автоподбор индекса в запросах
|
|||
---|---|---|---|
#18+
Уточню структуру индексов в 1С - возможно непонимание из за этого - все индексные выражения представляют собой простое строковое сложение полей таблицы, если поле не строкового типа - оно конвертируется в строку т.е. имеет вид f1(a1)+f2(а2)+f3(а3)+... где а - имя поля, например date f - функция преобразования в строку (или ее отсутствие, если уже строка), например DTOS для дат - т.е. они представляют собой аналог индекса SQL по нескольким полям Я думал, что в foxpro на практике также используют "индексы по нескольким полям", но тогда должна была всплыть эта проблема... ... |
|||
:
Нравится:
Не нравится:
|
|||
06.08.2008, 16:17 |
|
Автоподбор индекса в запросах
|
|||
---|---|---|---|
#18+
kiruhaУточню структуру индексов в 1С - возможно непонимание из за этого - все индексные выражения представляют собой простое строковое сложение полей таблицы, если поле не строкового типа - оно конвертируется в строку т.е. имеет вид f1(a1)+f2(а2)+f3(а3)+... где а - имя поля, например date f - функция преобразования в строку (или ее отсутствие, если уже строка), например DTOS для дат Это и так уже известно. Индексы в фоксе точно такие же. - т.е. они представляют собой аналог индекса SQL по нескольким полям А вот это вот большоей заблуждение. Я думал, что в foxpro на практике также используют "индексы по нескольким полям", но тогда должна была всплыть эта проблема... Фокс индексирует результаты выражения. То есть результат DTOS(date)+time+iddoc, к примеру, будет для записи равен '20080715152345WJEJRJT'. И вот этот результат и будет положен в индекс для этой записи. Это совершенно не список полей (date,time,iddoc), который бы использовал SQL сервер. И SQL сервер может из индекса вытащить значение одного из полей индекса. А в фоксе как Вы это предполагаете сделать? ... |
|||
:
Нравится:
Не нравится:
|
|||
06.08.2008, 16:49 |
|
Автоподбор индекса в запросах
|
|||
---|---|---|---|
#18+
проходящий. Я думал, что в foxpro на практике также используют "индексы по нескольким полям", но тогда должна была всплыть эта проблема... Фокс индексирует результаты выражения. То есть результат DTOS(date)+time+iddoc, к примеру, будет для записи равен '20080715152345WJEJRJT'. И вот этот результат и будет положен в индекс для этой записи. Это совершенно не список полей (date,time,iddoc), который бы использовал SQL сервер. И SQL сервер может из индекса вытащить значение одного из полей индекса. А в фоксе как Вы это предполагаете сделать? В примитиве у меня сделано так. Ищу Where и On Если встречается в них 1. Код: plaintext
беру выражение этого индекса : Код: plaintext
2. Код: plaintext
Это в примитиве. В более полном варианте нужно анализировать несколько предложений в WHERE, предложение IN , INLIST, вложенные подзапросы и т.п., не знаю почему эту работу драйвер не может взять на себя (драйвер SqlLite эту работу производит) ... |
|||
:
Нравится:
Не нравится:
|
|||
06.08.2008, 17:47 |
|
Автоподбор индекса в запросах
|
|||
---|---|---|---|
#18+
kiruhaВ примитиве у меня сделано так. Ищу Where и On Если встречается в них 1. Код: plaintext
беру выражение этого индекса : Код: plaintext
2. Код: plaintext
Это в примитиве. В более полном варианте нужно анализировать несколько предложений в WHERE, предложение IN , INLIST, вложенные подзапросы и т.п., не знаю почему эту работу драйвер не может взять на себя (драйвер SqlLite эту работу производит) Какую эту? Что такое драйвер SqlLite? К чему он подключается? На чем основано утверждение, что "эту работу производит"? ... |
|||
:
Нравится:
Не нравится:
|
|||
06.08.2008, 17:55 |
|
Автоподбор индекса в запросах
|
|||
---|---|---|---|
#18+
проходящий. Какую эту? Что такое драйвер SqlLite? К чему он подключается? На чем основано утверждение, что "эту работу производит"? В принципе это к проблеме мало имеет отношения, но если интересно (SqlLite по русски) внешняя компонента для 1С позволяющая подключать SqlLite Тесты(в том числе планы запроса по подбору оптимальных индексов) Очень-очень много страниц, все эти планы выполнения мы неоднократно обсуждали. Читать, думаю, тяжело. Предлагаю поверить мне на слово :) ... |
|||
:
Нравится:
Не нравится:
|
|||
06.08.2008, 18:15 |
|
Автоподбор индекса в запросах
|
|||
---|---|---|---|
#18+
kiruha проходящий. Какую эту? Что такое драйвер SqlLite? К чему он подключается? На чем основано утверждение, что "эту работу производит"? В принципе это к проблеме мало имеет отношения, но если интересно (SqlLite по русски) внешняя компонента для 1С позволяющая подключать SqlLite Тесты(в том числе планы запроса по подбору оптимальных индексов) Очень-очень много страниц, все эти планы выполнения мы неоднократно обсуждали. Читать, думаю, тяжело. Предлагаю поверить мне на слово :) Увы, но ничего позволяющего поверить на слово пока не вижу. Мы здесь сравниваем разные движки обработки данных? Их оптимизаторы? Или ты хочешь написать свой оптимизатор? ... |
|||
:
Нравится:
Не нравится:
|
|||
06.08.2008, 18:57 |
|
Автоподбор индекса в запросах
|
|||
---|---|---|---|
#18+
Судя по ссылке, автор (или авторы) SQLLite как раз и взял на себя труд "на лету" изменить условие выборки, чтобы оно использовало существующие индексные теги. Вот и используйте данный инструмент. Какие проблемы-то? Он, вроде бы бесплатный. ... |
|||
:
Нравится:
Не нравится:
|
|||
06.08.2008, 19:32 |
|
Автоподбор индекса в запросах
|
|||
---|---|---|---|
#18+
ВладимирМСудя по ссылке, автор (или авторы) SQLLite как раз и взял на себя труд "на лету" изменить условие выборки, чтобы оно использовало существующие индексные теги. Вот и используйте данный инструмент. Какие проблемы-то? Он, вроде бы бесплатный. Не вижу ничего простого. Подскажите если можете. ... |
|||
:
Нравится:
Не нравится:
|
|||
06.08.2008, 20:35 |
|
Автоподбор индекса в запросах
|
|||
---|---|---|---|
#18+
проходящий. Увы, но ничего позволяющего поверить на слово пока не вижу. Мы здесь сравниваем разные движки обработки данных? Их оптимизаторы? Или ты хочешь написать свой оптимизатор? В ссылке есть примеры запросов и планы выпонения с подбором индексов. Честно говоря, совсем не хотел бы здесь сравнивать движки и тем более sqlLite. Видимо оптимизатор запросов для Fox никто не писал - собственно это и хотел узнать. ... |
|||
:
Нравится:
Не нравится:
|
|||
06.08.2008, 20:39 |
|
Автоподбор индекса в запросах
|
|||
---|---|---|---|
#18+
kiruhaВидимо оптимизатор запросов для Fox никто не писал - собственно это и хотел узнать. Да я за много лет не видел ни одного оптимизатора запросов . Но во всех движках БД есть оптимизаторы исполнения запросов . И подбором индексов, при этом, кстати, автоматически, занимаются именно вторые. А вот первое - это чисто работа программиста, особенно если у него нет возможности изменить имеющиеся индексы. И это всего лишь подстраивание запроса под имеющиеся индексы. И насколько можно эту работу автоматизировать - очень большой вопрос. ... |
|||
:
Нравится:
Не нравится:
|
|||
06.08.2008, 21:02 |
|
Автоподбор индекса в запросах
|
|||
---|---|---|---|
#18+
проходящий. kiruhaВидимо оптимизатор запросов для Fox никто не писал - собственно это и хотел узнать. Да я за много лет не видел ни одного оптимизатора запросов . Но во всех движках БД есть оптимизаторы исполнения запросов . И подбором индексов, при этом, кстати, автоматически, занимаются именно вторые. А вот первое - это чисто работа программиста, особенно если у него нет возможности изменить имеющиеся индексы. И это всего лишь подстраивание запроса под имеющиеся индексы. И насколько можно эту работу автоматизировать - очень большой вопрос. Тогда перефразирую - Есть ли способ заставить оптимизатор исполнения запросов в движке FoxPro , автоматически заняться подбором индексов ? В случае когда есть возможность использовать индекс, но нет полного совпадения в условии с индексным выражением? ... |
|||
:
Нравится:
Не нравится:
|
|||
06.08.2008, 21:50 |
|
Автоподбор индекса в запросах
|
|||
---|---|---|---|
#18+
kiruhaТогда перефразирую - Есть ли способ заставить оптимизатор исполнения запросов в движке FoxPro , автоматически заняться подбором индексов ? В случае когда есть возможность использовать индекс, но нет полного совпадения в условии с индексным выражением? Хм, как уже было сказано, оптимизатор в любом движке именно этим и занимается. Атоматически. Другое дело, что искусственный интеллект еще не изобрели и ни один известный мне оптимизатор не поймет, что выражение ctod(dtoc(fdate)) эквивалентно FDATE И можно взять индекс по этому полю. И уж тем более не будет составлять из полей выражения. ... |
|||
:
Нравится:
Не нравится:
|
|||
06.08.2008, 23:31 |
|
Автоподбор индекса в запросах
|
|||
---|---|---|---|
#18+
Тут возникает вопрос, а нужно ли подклюяаться к БД 1С? Задача 1С самодостаточна и многофункциональна. Нет смысла лазить по базам. Другой вопрос это быстродействие - доступ к данным. Только для этого? Но FoxPro несравним по быстродействию и оптимизация здесь не уместна. БД до 100 000 записей в формате DBF не требуют оптимизации запросов. Не видел БД на 1С в DBF формате с таким количеством записей например в справочниках. 1С их просто не потянет на файлсервере. ... |
|||
:
Нравится:
Не нравится:
|
|||
08.08.2008, 16:58 |
|
Автоподбор индекса в запросах
|
|||
---|---|---|---|
#18+
karat4Но FoxPro несравним по быстродействию и оптимизация здесь не уместна. Ну-ну. На чем основано такое предположение? Из твоих рассуждений следует что фокс быстрее записи перебирает чем 1С? Это возможно только если фокс знает как быстрее с диска данные читать :) Возьми какую-нибудь базу с табличками по 10-100 тыс.записей, и позапускай запросы сначала как есть, а потом удали индексы и повтори. ... |
|||
:
Нравится:
Не нравится:
|
|||
08.08.2008, 17:07 |
|
|
start [/forum/topic.php?fid=41&msg=35474856&tid=1587406]: |
0ms |
get settings: |
9ms |
get forum list: |
13ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
64ms |
get topic data: |
10ms |
get forum data: |
3ms |
get page messages: |
59ms |
get tp. blocked users: |
2ms |
others: | 12ms |
total: | 180ms |
0 / 0 |