Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / SEEK, поиск по нескольким полям / 18 сообщений из 18, страница 1 из 1
26.08.2006, 00:36
    #33944457
321654987
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
SEEK, поиск по нескольким полям
Помогите, есть таблица

----------------------------

nomer | fm | im | ot

-----------------------------

есть индекс FIO с выражением - fm+im+ot

+-----------------------------------------------

как осуществлять поиск с помощью SEEK по этим полям?

SEEK "ФАМИ"+"ИММ"

------------------------
неполучается... поможите
...
Рейтинг: 0 / 0
26.08.2006, 02:24
    #33944506
MFoxer
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
SEEK, поиск по нескольким полям
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
&& Для теста создадим табличку
Local  i as Integer 
Create Table Tabletest ( nomer  N( 10 ), fm V( 30 ), im V( 30 ), ot V( 30 ) )
For i= 100  To  100000 
   Insert  Into Tabletest (nomer,fm,im,ot);
      Values  ( i,'1'+Chr( Mod(i, 255 )),Chr( Mod(i+ 1 , 255 )),Chr( Mod(i+ 2 , 255 )) ) 
Endfor
Index ON  Alltrim( fm ) +  Alltrim( im ) + Alltrim( ot ) Tag FIO

&&  Где-то там, в программе...

Set Safety Off
Set Exact On
Set Near On 

 Use  Tabletest In  0  Alias Tabletest Again Shared
 Local lcFind as String 
 lcFind = Alltrim( fm ) +  Alltrim( im ) + Alltrim( ot )
 ? Seek ( lcFind )

* Попробуй, тебе понравится.
* P.S VFP  9 . 0 
 
*
...
Рейтинг: 0 / 0
26.08.2006, 20:46
    #33944919
ВладимирМ
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
SEEK, поиск по нескольким полям
Для выполнения поиска по первым символам ключа необходима настройка

Код: plaintext
SET EXACT OFF

Вообще-то, это настройка по умолчанию, но у тебя она видимо изменена.
...
Рейтинг: 0 / 0
26.08.2006, 21:57
    #33944959
321654987
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
SEEK, поиск по нескольким полям
Огромное Вам, а почему в самом SEEK <выражение> не срабатывает? выражение как никак? или как?
А так ОГРОМНОЕ СПС
...
Рейтинг: 0 / 0
29.08.2006, 21:17
    #33950992
olegov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
SEEK, поиск по нескольким полям
321654987Огромное Вам, а почему в самом SEEK <выражение> не срабатывает? выражение как никак? или как?
А так ОГРОМНОЕ СПС

Да блин, используй ты locate про скорость выборки врут, на нынешних компах примерно та же что и у seek
...
Рейтинг: 0 / 0
29.08.2006, 22:10
    #33951047
Redrik
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
SEEK, поиск по нескольким полям
321654987FIO = fm+im+ot
SEEK "ФАМИ"+"ИММ"

У тебя ключ получается, например:
"Иванов Иван Иванович"
"Петров Петр Петрович"
"Сидоров Сидор Сидорович"

а ты хочешь SEEK'нуть такое: "ИванИва"?
Не получится!
Делай тогда "SEEK(...) and SEEK(...)", но индексы по отдельным полям...
...
Рейтинг: 0 / 0
29.08.2006, 23:24
    #33951102
MFoxer
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
SEEK, поиск по нескольким полям
Код: plaintext
да блин, используй ты locate про скорость выборки врут, на нынешних компах примерно та же что и у seek
А Вы собственно знаете разницу между алгоритмами перебора и алгоритмами половинного деления ? И наверное итерационные задачи решали, да ? Даже не смешно, честное слово.. пионерское.
...
Рейтинг: 0 / 0
29.08.2006, 23:53
    #33951133
ВладимирМ
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
SEEK, поиск по нескольким полям
MFoxer olegovда блин, используй ты locate про скорость выборки врут, на нынешних компах примерно та же что и у seek
А Вы собственно знаете разницу между алгоритмами перебора и алгоритмами половинного деления ? И наверное итерационные задачи решали, да ? Даже не смешно, честное слово.. пионерское.
Для справки.

В FoxPro оптимизируются ВСЕ команды и функции, имеющие FOR-условие. В том числе и LOCATE. Это значит, что в случае наличия простых индексов по полям "Фамилия", "Имя" и "Отчество" конструкция вида

SELECT MyTab
SET ORDER TO 0
LOCATE FOR "Фамилия" = ... AND "Имя" = ...

Также будет оптимизирована и скорость поиска будет сопоставима со скоростью поиска по SEEK(). Разумеется, меньше, но не так уж чтобы очень...
...
Рейтинг: 0 / 0
30.08.2006, 00:07
    #33951138
MFoxer
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
SEEK, поиск по нескольким полям
ВладимирМ, не будет. Давайте проведем эксперимент. Только определимся с алгоритмом и конфиргурацией компьютера и структурой и объемом данных.
Оптимизация движка фокса и алгорим просмотра записи 2 разные вещи, IMHO.
...
Рейтинг: 0 / 0
30.08.2006, 01:30
    #33951170
ВладимирМ
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
SEEK, поиск по нескольким полям
MFoxerВладимирМ, не будет. Давайте проведем эксперимент. Только определимся с алгоритмом и конфиргурацией компьютера и структурой и объемом данных.
Оптимизация движка фокса и алгорим просмотра записи 2 разные вещи, IMHO.
Давайте сначала определимся с терминами.

Задача: найти одну запись.

Какое отношение к этой задаче имеет "оптимизация движка фокса" и "алгоритм просмотра записи"?

В FoxPro есть так называемая Rushmore-оптимизация. Это механизм ускоренного поиска данных основанный на использовании индексов. Так вот, в HELP по FoxPro так и написано:

HELP VFP9Use Rushmore to optimize data access according to the number of tables involved. When you access single tables, you can take advantage of Rushmore anywhere that a FOR clause appears. When you access multiple tables, SELECT - SQL queries supersede all Rushmore optimizations. In an SQL command, Visual FoxPro decides what is needed to optimize a query and does the work for you. You don't need to open tables or indexes. If SQL decides it needs indexes, it creates temporary indexes for its own use.

Или, то же самое из переведенного HELP к VFP3

HELP VFP3При обработке одиночных таблиц преимущества технологии Rushmore сказываются везде, где используется предложение FOR . При обработке многотабличных запросов команда SELECT - SQL перекрывает все обычные правила, требуемые для технологии Rushmore. Команды SQL автоматически определяют необходимые правила оптимизации запроса. Вам не надо самостоятельно открывать таблицы или индексы. Если для выполнения запроса SQL потребуется индекс, он будет создан на время выполнения запроса.

Далее идет список потенциально оптимизируемых выражений. Среди них и команда LOCATE.

"Тонкость" использования оптимизации в отношении команд с FOR-условием заключается в том, что для лучшей оптимизации необходимо отключить главный индекс. То самое

SET ORDER TO 0

на которое мало кто обращает внимание. Если установлен главный индекс, то да, действительно, будут большие тормоза. Но если его отключить, то скорость поиска будет сопоставима с SEEK(). Повторюсь. Все-таки медленнее, но речь уже будет идти не о порядках, а о "разах".
...
Рейтинг: 0 / 0
30.08.2006, 01:39
    #33951171
MFoxer
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
SEEK, поиск по нескольким полям
>Какое отношение к этой задаче имеет "оптимизация движка фокса" и "алгоритм просмотра записи"?
Элементарное. Движок работает на уровне оптимизации страниц(4 КБ), а SEEK как и Locate использует алгоритмы и ему начехать, как там внутри. А Вы мне установки "тычете" . Рашмор - да, круто. Да Эффективно. А как сделан этот самый Рашмор Вы хоть раз задумывались ?
...
Рейтинг: 0 / 0
30.08.2006, 01:55
    #33951173
ВладимирМ
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
SEEK, поиск по нескольким полям
MFoxer>Какое отношение к этой задаче имеет "оптимизация движка фокса" и "алгоритм просмотра записи"?
Элементарное. Движок работает на уровне оптимизации страниц(4 КБ), а SEEK как и Locate использует алгоритмы и ему начехать, как там внутри. А Вы мне установки "тычете" . Рашмор - да, круто. Да Эффективно. А как сделан этот самый Рашмор Вы хоть раз задумывались ?
У нас стоит задача проверить эффективность работы (скорость поиска) или узнать "как оно внутри тикает"?

Как "этот самый Рашмор" работает я примерно представляю, а вот как он сделан - понятия не имею. И по прежнему не вижу, как именно "оптимизация страниц (4КБ)" может повлиять на скорость поиска нужной записи.

Знаете, я уже на практике убедился, что оптимизация (ускорение) LOCATE работает . Если у Вас есть возражения - приведите пример.
...
Рейтинг: 0 / 0
30.08.2006, 02:09
    #33951176
MFoxer
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
SEEK, поиск по нескольким полям
ВладимирМ, оптимизация ( ускорение ) LOCATE , по сравнению с чем ?
...
Рейтинг: 0 / 0
30.08.2006, 02:21
    #33951179
MFoxer
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
SEEK, поиск по нескольким полям
На С++ ( FLL) я могу представить Вам функцию поиска ( с условием ) по сравнению с которой Locate "одтыхает" . Верите ?
А почему ? А потому ,что когда наши коллеги писали эту функцию небыло итераторов, карт памяти и вообще библиотеки STL. А уж на ее алгоритм с 1992 года точно никто внимания не обращал.
...
Рейтинг: 0 / 0
30.08.2006, 09:07
    #33951330
PaulWist
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
SEEK, поиск по нескольким полям
2MFoxer

Извините. встряну в Ваш разговор,

MFoxer когда наши коллеги писали эту функцию небыло итераторов,

не могли бы Вы в двух словах описать "идеологию" этой ф-ии, уж очень любопытно - какой механизм использован для поиска в данных не подчиняющихся формальному описанию.
...
Рейтинг: 0 / 0
30.08.2006, 12:51
    #33952075
-=AlexiS=-
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
SEEK, поиск по нескольким полям
позволю себе тоже встрять в дискуссию.
более 10 лет работаю с фоксом.
с момента появления рашмора НИКОГДА не использую SEEK
правильно построенные индексы + рашмор много удобнее и не сказал-бы чтобы медленнее.
составные индексы практически не использую (только для сортировок при посмотрах).
Почему удобнее
1. не нужно "помнить" какой индекс активен (хотя в принципе есть indexseek)
2. не нужно при поиске в составных индексах приводить выражение поиска к индексному выражению.
3.при изменениях/удалениях/добавлениях тегов программа работает без переделок.

то MFoxer
А как сделан этот самый Рашмор Вы хоть раз задумывались ? - меня собственно и не волнует, я знаю как с ним работать, и мне не обязательно знать как он там внутри все делает.
Вы когда свет дома включаете - сильно задумываетесь как все устроено ( ну там электростанция , проводка, лампочка) ?
...
Рейтинг: 0 / 0
30.08.2006, 14:11
    #33952439
ВладимирМ
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
SEEK, поиск по нескольким полям
MFoxerВладимирМ, оптимизация ( ускорение ) LOCATE , по сравнению с чем ?
Вы помните, с чего лично Вы вообще ввязались в эту дискуссию?

olegovДа блин, используй ты locate про скорость выборки врут, на нынешних компах примерно та же что и у seek

Да, если индексов нет, то команда LOCATE будет вынуждена сканировать записи таблицы, что само по себе медленно. Поэтому с самого начала, когда я вступил в дискуссию, я Вам напомнил, что команда LOCATE может быть оптимизирована (ускорена).

Насколько я понимаю, Вы слишком увлеклись опровержением высказывания olegov и просто не поняли, что я Вам напомнил, причем подчеркнул как "К сведению".

А напомнил я Вам очевидный факт. Команда LOCATE может выполняться медленно или быстро в зависимости от того, будет ли ее выражение оптимизировано.
...
Рейтинг: 0 / 0
30.08.2006, 23:15
    #33954003
Redrik
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
SEEK, поиск по нескольким полям
MFoxerНа С++ ( FLL) я могу представить Вам функцию поиска... по сравнению с которой Locate "отдыхает" ....
DO IT!!! Revolution!!!

P.S. Снова ушли в "страну вечных споров"? Исходный вопрос перечитайте...

P.P.S. Как сказал когда-то старик Лес - "Билли отвалил грузовик денег за Рашмора"! ;-)
...
Рейтинг: 0 / 0
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / SEEK, поиск по нескольким полям / 18 сообщений из 18, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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