|
|
|
Какая возможна альтернатива Like в VFP OLE DB?
|
|||
|---|---|---|---|
|
#18+
Имеется таблица dbf на 1 млн. записей. В одном поле необходимо найти определенное значение. Данные могут быть примерно такого типа 43КМ549812. Мне необходимо организовать поиск по последним 6 цифрам. Подключаюсь к таблице через .NET Framework Data Provider for OLE DB. Поиск по принципу Код: plaintext 1. Запрос вида where right(field,6) like '549812' тоже выполняется долго. Возможно ли ускорить процесс поиска по данному критерию? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.03.2008, 16:51 |
|
||
|
Какая возможна альтернатива Like в VFP OLE DB?
|
|||
|---|---|---|---|
|
#18+
пишу в VS 2005, C#, NET Framework Data Provider for OLE DB. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.03.2008, 16:55 |
|
||
|
Какая возможна альтернатива Like в VFP OLE DB?
|
|||
|---|---|---|---|
|
#18+
"Mdel" <nospam@sql.ru> сообщил/сообщила в новостях следующее: news:5390762@sql.ru... > Автор: Mdel > Имеется таблица dbf на 1 млн. записей. В одном поле необходимо найти > определенное значение. Данные могут быть примерно такого типа 43КМ549812. > Мне необходимо организовать поиск по последним 6 цифрам. > Подключаюсь к таблице через .NET Framework Data Provider for OLE DB. > Поиск по принципу > > > select field from table where field like '*549812' > не подходит, насколько я помню, like очень не любит подстановочные символы > в начале строки, и запрос выполняет слишком долго (4-6 сек). > > Запрос вида where right(field,6) like '549812' тоже выполняется > долго. > > Возможно ли ускорить процесс поиска по данному критерию? Не знаю насчет .NET Framework Data Provider for OLE DB, а для самого фокса, тем более по сети такие скоростные характеристики (4-6 сек) при подобном запросе довольно таки быстрые. В фоксе ( как собственно и через нормального провайдера, понимающего индексы) ускорения можно добится создав индекс по выражению right(field,6), тогда запрос вида " where right(field,6) == '549812' " подцепит этот индекс, что приведет к существенному ускорению. Posted via ActualForum NNTP Server 1.4 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.03.2008, 05:40 |
|
||
|
Какая возможна альтернатива Like в VFP OLE DB?
|
|||
|---|---|---|---|
|
#18+
в VFP Индекс поможет - рашмор другое дело если надо проивольный like то шерсить всю таблу придется а вот в .NET Framework Data Provider for OLE DB. ?? очень даоже интеерсно - по идее должно - ОТПИШИ плз сюда помогло или ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.03.2008, 20:21 |
|
||
|
Какая возможна альтернатива Like в VFP OLE DB?
|
|||
|---|---|---|---|
|
#18+
select field from table where field like '%549812' ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.03.2008, 22:51 |
|
||
|
Какая возможна альтернатива Like в VFP OLE DB?
|
|||
|---|---|---|---|
|
#18+
AleksMedselect field from table where field like '%549812' я понимаю что процент вместо *, суть от этого не меняется :) и кстати процент в SQL server, в DBF и Firebird все таки * :) Galyamov Rinat Не знаю насчет .NET Framework Data Provider for OLE DB, а для самого фокса, тем более по сети такие скоростные характеристики (4-6 сек) при подобном запросе довольно таки быстрые. Тогда объясните, почему когда я ищу заведомо НЕСУЩЕСТВУЮЩИЕ данные, то есть вместо 43КМ549812 я ищу ОР99ГОШЛГН, то ответ о том, что таких данных нет приходит МОМЕНТАЛЬНО? с like без Like, по барабану. Galyamov Rinat ускорения можно добится создав индекс по выражению right(field,6), Индекс я не могу сделать, программа пишется для сторонней организации, менять структуры таблиц мне не позволят. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.03.2008, 11:10 |
|
||
|
Какая возможна альтернатива Like в VFP OLE DB?
|
|||
|---|---|---|---|
|
#18+
MdelТогда объясните, почему когда я ищу заведомо НЕСУЩЕСТВУЮЩИЕ данные, то есть вместо 43КМ549812 я ищу ОР99ГОШЛГН, то ответ о том, что таких данных нет приходит МОМЕНТАЛЬНО? с like без Like, по барабану. Странно, попробуй поискать похожее на нормальное, но не существующее, что-то типа 43КМ439873 Mdel Galyamov Rinat ускорения можно добится создав индекс по выражению right(field,6), Индекс я не могу сделать, программа пишется для сторонней организации, менять структуры таблиц мне не позволят. При отсутствии индекса поиск будет идти перебором всех записей. Оптимизация возможна только при наличии индекса. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.03.2008, 12:06 |
|
||
|
Какая возможна альтернатива Like в VFP OLE DB?
|
|||
|---|---|---|---|
|
#18+
> Тогда объясните, почему когда я ищу заведомо НЕСУЩЕСТВУЮЩИЕ данные, > то есть вместо 43КМ549812 я ищу ОР99ГОШЛГН, то ответ о том, что таких > данных нет приходит МОМЕНТАЛЬНО? с like без Like, по барабану. Пара вопросов: 1 len(field) = ??? не 10 случаем (=len('ОР99ГОШЛГН'))??? 2 индекс по field есть? > Galyamov Rinat > ускорения можно добится создав индекс по выражению > right(field,6), > Индекс я не могу сделать, программа пишется для сторонней > организации, менять структуры таблиц мне не позволят. Наличие индекса никак не повлияет на работоспособность других программ. Разве что чуть замедлит внесение данных и изменение поля по которому есть индекс. Posted via ActualForum NNTP Server 1.4 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.03.2008, 05:31 |
|
||
|
Какая возможна альтернатива Like в VFP OLE DB?
|
|||
|---|---|---|---|
|
#18+
Если ответ на первый вопрос положителен, то как минимум не нужно производить поиск вхождений!!! Достаточно прямого сравнения строк - что намного быстрее. Если при этом ответ на второй вопрос положительный - тогда все ускоряется еще в несколько (десятков) раз. Posted via ActualForum NNTP Server 1.4 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.03.2008, 05:34 |
|
||
|
Какая возможна альтернатива Like в VFP OLE DB?
|
|||
|---|---|---|---|
|
#18+
> > Тогда объясните, почему когда я ищу заведомо НЕСУЩЕСТВУЮЩИЕ данные, > > то есть вместо 43КМ549812 я ищу ОР99ГОШЛГН, то ответ о том, что > таких > > данных нет приходит МОМЕНТАЛЬНО? с like без Like, по барабану. А если поискать заведомо существующее??? Т.е. не like "*549812", а =="43КМ549812", тоже скорость 4-6 секунд??? Posted via ActualForum NNTP Server 1.4 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.03.2008, 05:36 |
|
||
|
Какая возможна альтернатива Like в VFP OLE DB?
|
|||
|---|---|---|---|
|
#18+
короче, объясняю как есть :) есть база ГАИ, в ней постановления о штрафах. номер постановления 27ВВ155675 - точно есть(мой номер :) ) 1. Индекс по полю есть. 2. Если я ищу прямое вхождение 27ВВ155675, то поиск по СЕТИ идет около 10-12 сек. Если я ищу по like '27%155675', т.е 27% я добавляю в коде, а пользователь, чтобы не вводить буквы(для ускорения работы), вводит только цифры, то поиск идет около минуты. 3. если я ищу НЕСУЩЕСТВУЮЩИЕ данные, то есть по прямому вхождению ищу 27ВВ999999 - ответ что записей нет приходит моментом. А длина поля, как вы можете видеть, равна 10. А что, это на что то влияет? именно 10? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.03.2008, 09:53 |
|
||
|
Какая возможна альтернатива Like в VFP OLE DB?
|
|||
|---|---|---|---|
|
#18+
Если хотите, я вам даже видео выложу как он моментом ищет левые данные и как долго существующие.. :) я прям в прострации :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.03.2008, 09:56 |
|
||
|
Какая возможна альтернатива Like в VFP OLE DB?
|
|||
|---|---|---|---|
|
#18+
MdelЕсли хотите, я вам даже видео выложу как он моментом ищет левые данные и как долго существующие.. :) я прям в прострации :) Видео не надо. Надо изначально корректно описывать задачу. Ясновидящих тут нет. Было так: MdelМне необходимо организовать поиск по последним 6 цифрам. Вот на это тебе и отвечали. Давай рассмотрим как есть: Mdelкороче, объясняю как есть :) есть база ГАИ, в ней постановления о штрафах. номер постановления 27ВВ155675 - точно есть(мой номер :) ) 1. Индекс по полю есть. 2. Если я ищу прямое вхождение 27ВВ155675, то поиск по СЕТИ идет около 10-12 сек. Полностью оптимизированный поиск по индексу + выборка результата по сети. Такая скорость тоже не устраивает? MdelЕсли я ищу по like '27%155675', т.е 27% я добавляю в коде, а пользователь, чтобы не вводить буквы(для ускорения работы), вводит только цифры, то поиск идет около минуты. Частично оптимизированный поиск. ищутся все записи начинающиеся на "27" и потом сравниваются на соответствие шаблону. Т.к. записей много (27 это регион или серия как я понимаю) и физически могут быть в разных концах DBF то это тормозить и без сетки будет. Mdel3. если я ищу НЕСУЩЕСТВУЮЩИЕ данные, то есть по прямому вхождению ищу 27ВВ999999 - ответ что записей нет приходит моментом. Полностью оптимизированный поиск по индексу, а т.к. в индексе нет, то выборки результата не происходит. Некорректный тест. попробуй "27%999999" - думаю будет около минуты. Что еще можно попробовать: 1. Шаблон заменить на '27??155675'. Хотя думаю это не сильно ускорит 2. Использовать монопольный доступ к таблице, тогда издержек на блокировки не будет и клиент кэшировать будет. Как вариант иметь обновляемую копию на клиенте, возможно только поля с номером и Id записи, тут индексы какие угодно можешь создать, делать выборки списка Id, а по Id запрос к основной базе. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.03.2008, 10:24 |
|
||
|
Какая возможна альтернатива Like в VFP OLE DB?
|
|||
|---|---|---|---|
|
#18+
Монопольный не получится, т.к. в гаи все таки народ тоже работает с базой :) копию тоже бессмысленно заводить, все должно быть в живой базе... Остановился все таки на полностью оптимизированном запросе. Пусть уж лучше оператор наберет буквы с номером и подождет 10 сек, чем наберет только номер и будет ждать минуту. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.03.2008, 10:44 |
|
||
|
Какая возможна альтернатива Like в VFP OLE DB?
|
|||
|---|---|---|---|
|
#18+
Используйте функцию SYS(3054,11), чтобы понять, какие индексы используются и есть ли оптимизация Код: plaintext 1. 2. 3. Основа ускорения - использование индексов. Если индекс используется, то ускорение возможно. Если индекс не используется, то запрос будет выполняться напрямую по исходным данным, что, как правило, медленее. Для справки, конструкция Field LIKE 'XXX%' эквивалентна конструкции Field = 'XXX' при настройке SET ANSI OFF (эта настройка по умолчанию). И, как следствие, использует индекс. Т.е. есть ускорение. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.03.2008, 11:21 |
|
||
|
Какая возможна альтернатива Like в VFP OLE DB?
|
|||
|---|---|---|---|
|
#18+
Mdel2. Если я ищу прямое вхождение 27ВВ155675, то поиск по СЕТИ идет около 10-12 сек. Это не просто много а очень много... А если использовать другой подход - написать прослойку для запросов? Если сервер под Windows, то можно прямо на сервере сделать Web Service (на любимом Вами .NET это делается очень легко и быстро) и уже к нему слать запросы. Если правила не позволяют, то поставить рядом еще сервер, соединить чем-то быстрым навроде 1-2Gb/s сетью и снова "повесить" туда Web Service + использовать его для других задач - заодно всем поможете делать их работу быстрее ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.03.2008, 12:26 |
|
||
|
Какая возможна альтернатива Like в VFP OLE DB?
|
|||
|---|---|---|---|
|
#18+
нет, спасибо конечно за такие советы, только вы забываете что я пишу программу для гос.организации, причем сторонней, сам я там не работаю. :) Поэтому никто не даст мне воткнуть веб-сервис к ним, равно как и поставить другой сервак :) тех.обеспечение ГАИ давно оставляет желать лучшего :) ВладимирМ Для справки, конструкция Field LIKE 'XXX%' эквивалентна конструкции Field = 'XXX' Да, эквивалентна, но вот конструкции 'XX%XXX', а тем более '%XX', нет. На локальной базе все ищется намного быстрее, прямой поиск (27ВВ155675) выполняется за 1-2 сек, частичный (27%155675) - около 15 сек. Основная то проблема в сети+железо на котором все это крутится+невозможность поправить индексы в базе. Их базу часто обновляет Москва, заменяя таблицы. Индексация используется однозначно, в ранних версиях программы без индексов поиск вообще шел около 5 минут :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.03.2008, 01:01 |
|
||
|
Какая возможна альтернатива Like в VFP OLE DB?
|
|||
|---|---|---|---|
|
#18+
MdelИндексация используется однозначно, в ранних версиях программы без индексов поиск вообще шел около 5 минут :) Вы можете думать и предполагать что индексы используются или не используются. Но лучше все-таки убедится на практике. Иначе, так и будем "толочь воду в ступе". Причина ускорения может быть другой. Не зависящей от индексов. Вот и убедитесь , что индексы реально используются. И какие именно индексы. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.03.2008, 11:52 |
|
||
|
Какая возможна альтернатива Like в VFP OLE DB?
|
|||
|---|---|---|---|
|
#18+
ВладимирМ Вы можете думать и предполагать что индексы используются или не используются. Но лучше все-таки убедится на практике. Иначе, так и будем "толочь воду в ступе". Причина ускорения может быть другой. Не зависящей от индексов. Вот и убедитесь, что индексы реально используются. И какие именно индексы. При попытке просмотреть индексы вылетает такая ошибка: file does not exist Тогда объясните мне неучу, почему ОБНОВЛЕНИЕ и УДАЛЕНИЕ происходит моментально? запрос тот же самый: update table set sank = 'ОПЛ' where postanov='27ВВ155675' ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.03.2008, 11:18 |
|
||
|
Какая возможна альтернатива Like в VFP OLE DB?
|
|||
|---|---|---|---|
|
#18+
Выяснил я точно по индексам. на данное поле postanov стоит 2 индекса, первый - по полной строке postanov, второй вида Код: plaintext Код: plaintext Код: plaintext то поиск идет около 2 минут, т.к. подобного индекса нет в таблице. Отсюда делаю вывод, что индексы все таки используются. Вопрос в том, почему поиск идет так долго? Если открыть таблицу в Visual FoxPro (shared) через сеть и выполнить запрос Код: plaintext ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.03.2008, 06:48 |
|
||
|
Какая возможна альтернатива Like в VFP OLE DB?
|
|||
|---|---|---|---|
|
#18+
Вы опять делаете предположения основываясь не на знаниях, а на так называемом "здравом смысле", т.е. личном опыте. Пока Вы точно не будете знать используется индекс или нет, все Ваши построения так и остануться предположениями и не более того. Посмотрите описание функции SYS(3054). Там есть вариант сохранения результаты работы в переменную памяти, откуда ее уже можно было бы записать в мемо-поле таблицы и потом посмотреть. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.03.2008, 11:57 |
|
||
|
Какая возможна альтернатива Like в VFP OLE DB?
|
|||
|---|---|---|---|
|
#18+
Володь, sys(3054) в OLEDB не поддерживается. Автору надо либо в фоксе план запроса посмотреть, либо писать СОМ. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.03.2008, 12:46 |
|
||
|
Какая возможна альтернатива Like в VFP OLE DB?
|
|||
|---|---|---|---|
|
#18+
Mdel... Вопрос в том, почему поиск идет так долго? Если открыть таблицу в Visual FoxPro (shared) через сеть и выполнить запрос то результат придет мгновенно. Неужели проблема скорости в VFP OLE DB ? Может на фоксе написать? C# по какой причине выбран? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.03.2008, 13:05 |
|
||
|
Какая возможна альтернатива Like в VFP OLE DB?
|
|||
|---|---|---|---|
|
#18+
Dima T Mdel... Вопрос в том, почему поиск идет так долго? Если открыть таблицу в Visual FoxPro (shared) через сеть и выполнить запрос то результат придет мгновенно. Неужели проблема скорости в VFP OLE DB ? Может на фоксе написать? C# по какой причине выбран? По той простой, что на фоксе я не писал уже года 3-4, а в C# пишу постоянно :) Я запустил фокс, ВЫЯСНИЛ таки, какие индексы используются, и попутно выяснил что проблема была совершенно в другом! На поле постановления было 2 индекса: 1-по всему полю, второй вида SUBSTR(postanov,5,8) - то есть поиск по номеру постановления без 27ВВ. То есть я теперь утверждаю, что индексы используются, хотя ВладимирМ упорно не хочет это признать :) Вот здесь я описал в чем проблема такого длительного поиска. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.03.2008, 02:16 |
|
||
|
Какая возможна альтернатива Like в VFP OLE DB?
|
|||
|---|---|---|---|
|
#18+
Mdel Dima TМожет на фоксе написать? C# по какой причине выбран? По той простой, что на фоксе я не писал уже года 3-4, а в C# пишу постоянно :) Еще подумай о фоксе, тем более писал раньше. MdelНа поле постановления было 2 индекса: 1-по всему полю, второй вида SUBSTR(postanov,5,8) - то есть поиск по номеру постановления без 27ВВ. То есть я теперь утверждаю, что индексы используются, хотя ВладимирМ упорно не хочет это признать :) ВладимирМ вероятно не ознакомился со всеми твоими тестами. MdelВот здесь я описал в чем проблема такого длительного поиска. Там ответили, я тоже по твоим тестам на 90% уверен что дело в OLE DB. Так-что выбирай или тормоз с OLE DB, или COM для запросов на фоксе или целиком на фоксе писать. Как вариант попробуй по OLE DB из фокса. Если тоже 10-12 сек., то это не в пользу OLE DB ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.03.2008, 17:26 |
|
||
|
|

start [/forum/topic.php?fid=41&msg=35190424&tid=1587999]: |
0ms |
get settings: |
8ms |
get forum list: |
16ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
47ms |
get topic data: |
8ms |
get forum data: |
2ms |
get page messages: |
58ms |
get tp. blocked users: |
1ms |
| others: | 201ms |
| total: | 347ms |

| 0 / 0 |
