Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / Выборка данных из таблицы / 25 сообщений из 27, страница 1 из 2
29.05.2008, 16:15
    #35343623
mirti
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Выборка данных из таблицы
есть 2 таблицы,
1 таблица основной список клиентов,
2 таблица из филиала содержит маленький список клиентов,
подскажите пожалуйста как сделать чтобы производился поиск по всем именам клиентов из 2 (маленькой таблицы) в первой таблице с последуюшим выводом найденных?????
...
Рейтинг: 0 / 0
29.05.2008, 17:57
    #35344060
MaestroEv
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Выборка данных из таблицы
Ключи..Индексы надеюсь есть?
select * from vtoray where seek(kod,"pervay","kod") into ...
...
Рейтинг: 0 / 0
30.05.2008, 08:25
    #35344730
Galyamov Rinat
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Выборка данных из таблицы
Я правильно понимаю, что нужно вывести строки, которые содержаться и там и
там???

Select _1.* from _1 inner join_2 on _1.name==_2.Name into cursor ttt
brow

Ну или, смотря что надо
Select _2.* from _1 inner join_2 on _1.name==_2.Name into cursor еее
brow


Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
30.05.2008, 11:55
    #35345374
mirti
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Выборка данных из таблицы
индексный файл cdx имеется у большого файла но в другом каталоге,
а как его использовать чтобы поиск производился быстрее?

запрос -
Код: plaintext
Select _2.* from _1 inner join_2 on _1.name==_2.Name into cursor еее

производится очень долго, я понимаю что надо использовать индексный файл, но как, где?
...
Рейтинг: 0 / 0
30.05.2008, 12:16
    #35345457
Выборка данных из таблицы
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
_screen.Cls()

create cursor tt (t i)
insert into tt values ( 1 )
insert into tt values ( 2 )
insert into tt values ( 3 )
insert into tt values ( 4 )
insert into tt values ( 5 )

create cursor pp (p i)
insert into pp values ( 3 )
insert into pp values ( 5 )


sys( 3054 , 12 )

? "1"
? "=================="
* нет
select * from tt where t> 0  into cursor kk


? "2"
? "=================="
* да
set deleted off
select tt
index on t tag t
index on deleted() tag del

select * from tt where t> 0  into cursor kk


? "3"
? "=================="
* нет
select tt.* ;
	from tt ;
		inner join pp on pp.p=tt.t ;
	into cursor kk



? "4"
? "=================="
* да
select pp
index on p tag p
index on deleted() tag del

select t1.* ;
	from tt t1;
		inner join pp t2 on t1.t=t2.p and t2.p= 5  ;
	where t1.t= 5  ;
	into cursor kk
	


прочитайте про рашмор
+ понимание оптимизации в хелпе
...
Рейтинг: 0 / 0
30.05.2008, 12:22
    #35345475
Выборка данных из таблицы
index on deleted() tag del binary

про это также есть в хелпе,
попробуйте почитать и поискать здесь
...
Рейтинг: 0 / 0
30.05.2008, 14:19
    #35345848
ВладимирМ
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Выборка данных из таблицы
mirtiиндексный файл cdx имеется у большого файла но в другом каталоге,
а как его использовать чтобы поиск производился быстрее?

запрос -
Код: plaintext
Select _2.* from _1 inner join_2 on _1.name==_2.Name into cursor еее

производится очень долго, я понимаю что надо использовать индексный файл, но как, где?
Индексный файл используется автоматически, если он подключен. При этом его физическое положение роли не играет.

Ваша фраза "индексный файл имеется ... но в другом каталоге" надо понимать так, что он находится не там, где сам "большой файл"?

Вообще, факт использования или не использования индекса можно проверить при помощи функции SYS(3054) примерно так

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
* Включаем отображение работы оптимизатора
=SYS( 3054 , 12 )

* Выполняем запрос
Select _2.* from _1 inner join_2 on _1.name==_2.Name into cursor еее

* Отключаем отображение работы оптимизатора
=SYS( 3054 , 0 )

Ну, а то, что запрос "долго работает" может быть следствие большого количества записей, которые попадают в выборку.

Кстати, если во второй (маленькой) таблице возможны дубли (повторы) названий клиентов, то INNER JOIN использовать нельзя. Необходимо переписать запрос на IN или EXISTS примерно так

Код: plaintext
Select _2.* from _2 where _2.Name IN (SELECT _1.Name FROM _1) into cursor еее
...
Рейтинг: 0 / 0
30.05.2008, 16:18
    #35346208
mirti
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Выборка данных из таблицы
ВладимирМВаша фраза "индексный файл имеется ... но в другом каталоге" надо понимать так, что он находится не там, где сам "большой файл"?
Да сама основная база лежить в каталоге - flip\base\klients.dbf
а индексный файл лежит в - flip\cdx\klients.cdx

при выполнении комманды =SYS(3054,12)
пишет что оптимизация для таблицы отсутствует,
что мне дальше сделать чтобы она присутствовала :-) ?
или как соединить индексный файл?
...
Рейтинг: 0 / 0
30.05.2008, 16:30
    #35346259
ВладимирМ
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Выборка данных из таблицы
Ну, если индекс лежит отельно от файла, то подключить его можно таким образом

Код: plaintext
1.
2.
3.
4.
5.
USE flip\base\klients.dbf INDEX flip\cdx\klients.cdx IN  0  ALIAS klients

* В качестве источника данных в запросе указывается имя из опции ALIAS команды USE

SELECT ... FROM klients  

Однако проблема в том, что в случае раздельного существования файла DBF и файла CDX есть риск их рассинхронизации. В том смысле, что содержимое индексного файла не соответствует содержимому табличного файла (данные устарели).

Как правило, в этих случаях после подключения индекса выполняют переиндексацию. Хотя этот процесс занимает довольно много времени.

Впрочем, попробуйте сначала проверить выполнение запроса с подключенным индексом.
...
Рейтинг: 0 / 0
02.06.2008, 11:18
    #35348496
mirti
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Выборка данных из таблицы
перекинул индексные файлы в тот же каталог где и бдфки,
проиндексировал главный файл заново,
маленькие таблицы которые поступают тоже индексирую,
но запрос всеравно происходит медленно, в главной таблице около 1млн 700 тыс. записей
запрос выполняется около 27 секунд!!!!!!
почему? что я не так делаю???
...
Рейтинг: 0 / 0
02.06.2008, 11:26
    #35348521
ВладимирМ
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Выборка данных из таблицы
Для начала, надо проверить используются ли эти самые индексы. При помощи функции SYS(3054).
...
Рейтинг: 0 / 0
02.06.2008, 11:53
    #35348581
mirti
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Выборка данных из таблицы
проверил данной функцией, пишет что оптимизация таблиц отсутствует! :((
почему? ну как же ее тогда включить?
...
Рейтинг: 0 / 0
02.06.2008, 11:59
    #35348601
ВладимирМ
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Выборка данных из таблицы
Это значит, что по мнению оптимизатора данный индекс использовать нельзя.

Такое возможно, если индекс создан в режиме COLLATE отличном от текущей настройки SET COLLATE.

Используй функцию ATAGINFO() после открытия таблицы чтобы посмотреть реквизиты открытого индекса. Обрати внимание на 6 столбец. Затем сравни с тем, что возвращает

?SET("COLLATE")

Кроме того, оптимизатор не использует индексы, имеющие FOR-условия (это 4 столбец полученного по ATAGINFO() массива), кроме некоторых исключений.
...
Рейтинг: 0 / 0
02.06.2008, 12:26
    #35348678
mirti
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Выборка данных из таблицы
ATAGINFO() возвращает - 0 (ноль)

?SET("COLLATE") возврашает - Machine
...
Рейтинг: 0 / 0
02.06.2008, 12:28
    #35348686
mirti
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Выборка данных из таблицы
извиняюсь!!!
ATAGINFO - возврашает 1
...
Рейтинг: 0 / 0
02.06.2008, 13:29
    #35348879
ВладимирМ
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Выборка данных из таблицы
mirtiизвиняюсь!!!
ATAGINFO - возврашает 1

Почитайте, пожалуйста, HELP по функции ATAGINFO(). Используется примерно так:

Код: plaintext
1.
2.
3.
select MyTable
=ATAGINFO(laIndex)
* Анализ созданного массива laIndex
...
Рейтинг: 0 / 0
02.06.2008, 14:13
    #35349028
mirti
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Выборка данных из таблицы
вот что показала функция ATAGINFO:
1.KLIENTS
2.REGULAR
3.NUMP
4.lAINDEX
5.ASCENDING
6.MACHINE

SET("COLLATE") возврашает - Machine

ВладимирМОбрати внимание на 6 столбец. Затем сравни с тем, что возвращает
?SET("COLLATE")
шестой столбец совпадает с полученным результатом от функции SET
пожалста скажите что надо делать дальше!
...
Рейтинг: 0 / 0
02.06.2008, 14:46
    #35349119
ВладимирМ
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Выборка данных из таблицы
ВладимирМКроме того, оптимизатор не использует индексы, имеющие FOR-условия (это 4 столбец полученного по ATAGINFO() массива), кроме некоторых исключений.
...
Рейтинг: 0 / 0
02.06.2008, 15:44
    #35349308
mirti
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Выборка данных из таблицы
Вы сильно не ругайте меня,я новичок в фоксе,
а 4 столбец это же имя масива в который я получаю эти значения,
выходит что быстрее поиск выполняться уже не будет?
...
Рейтинг: 0 / 0
02.06.2008, 20:22
    #35350033
ВладимирМ
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Выборка данных из таблицы
mirtiВы сильно не ругайте меня,я новичок в фоксе,
а 4 столбец это же имя масива в который я получаю эти значения,
выходит что быстрее поиск выполняться уже не будет?
Вы бы все-таки HELP прочитали. Не может 4 столбец содержать имя массива. Там содержится выражение, которое указывается в FOR-условии команды INDEX. Как Вы вообще смотрите содержимое этого массива?

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
LOCAL laIndex( 1 ), lnTotal, lnI
select MyTable
lnTotal = ATAGINFO(laIndex)
FOR m.lnI =  1  TO m.lnTotal
	?"----------------------"
	?"Индекс ", m.lnI
	?"Name = ", laIndex[m.lnI, 1 ]
	?"Type = ", laIndex[m.lnI, 2 ]
	?"Key = ", laIndex[m.lnI, 3 ]
	?"Filter = ", laIndex[m.lnI, 4 ]
	?"Order = ", laIndex[m.lnI, 5 ]
	?"Collate = ", laIndex[m.lnI, 6 ]
ENDFOR
...
Рейтинг: 0 / 0
03.06.2008, 09:13
    #35350363
mirti
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Выборка данных из таблицы
вот что получилось:

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
Индекс      1 
Name= Kod
Type= Regular
Key= alltrim(seria)+alltrim(nomer)
Filter=
Order= Ascending
Collate= Machine

Индекс      2 
Name= FIO
Type= Regular
Key= names
Filter=
Order= Ascending
Collate= Machine

четвертый столбец пустой
...
Рейтинг: 0 / 0
03.06.2008, 11:02
    #35350626
Galyamov Rinat
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Выборка данных из таблицы
> Индекс 1
> Name= Kod
> Type= Regular
> Key= alltrim(seria)+alltrim(nomer)
> Filter=
> Order= Ascending
> Collate= Machine
>
> Индекс 2
> Name= FIO
> Type= Regular
> Key= names
> Filter=
> Order= Ascending
> Collate= Machine


А теперь посмотри на условия индекса (key = ) и условия объединения:

_1.name==_2.Name

Я индекса по "name" не вижу.


Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
03.06.2008, 14:26
    #35351361
не pro в fox
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Выборка данных из таблицы
ВладимирМ
Индексный файл используется автоматически, если он подключен.


а как узнать подключен к файлу индексный файл и как его имя?
...
Рейтинг: 0 / 0
03.06.2008, 18:20
    #35352114
ВладимирМ
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Выборка данных из таблицы
не pro в fox ВладимирМ
Индексный файл используется автоматически, если он подключен.


а как узнать подключен к файлу индексный файл и как его имя?
Структурный индексный файл подключается автоматически. Если же хочется посмотреть список подключенных индексных файлов, то это можно сделать так:

Код: plaintext
?SET("INDEX")
...
Рейтинг: 0 / 0
04.06.2008, 10:30
    #35353221
не pro в fox
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Выборка данных из таблицы
В каких случаях данный структурный файл подключается, а в каких нет? Имеется система позволяющая выгружать данные в dbf файл. В некоторых случаях при открытии dbf файла требуется cdx файл. Т.е. вопрос наверное звучит так: индексный файл создается автоматически при создании dbf файла или это реализация программистов писавших систему - возможна запись в файл dbf без использования cdx файлов?
...
Рейтинг: 0 / 0
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / Выборка данных из таблицы / 25 сообщений из 27, страница 1 из 2
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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