Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Выборка из большой базы [D5, dBase, FoxPro]


Страницы:   1 2

Иванов Сергей ©   (2004-07-21 15:11:00) 

Есть табличка Фокспро7 почти 2 гига нужно выбрать из неё немного  данных.

BDE работает, но выборка занимает на бешеной машине 15 минут.
ADO попробовал таже фигня.
это были query
попробовал adotable - оно потащило всю базу в память и у меня все попадало...

Как выбрать? там индексы есть, но как пользоваться не понимаю.

С уважением Иванов Сергей.


Иванов Сергей   (2004-07-22 09:55:00) [1]

to bushmen ©   (22.07.04 09:30) [23]

вот ведь написано же в TCustomADODataSet.CursorLocation
сейчас попробую.

Спасибо.

A server-side cursor offers less flexibility, but may be more advantageous (or necessary) for large result sets. Using a server-side cursor becomes necessary when the sheer size of a result set exceeds the available disk space that would be needed to create the client-side cursor. Also, many servers only support unidirectional cursors. This would preclude moving the record pointer in the dataset backward (even one record) through the result set.


Sandman25   (2004-07-22 09:54:00) [2]

[26] Иванов Сергей   (22.07.04 09:48)

Конечно, должна. Только без индексов базе придется пересмотреть всю таблицу sclad_mdocm, а затем для каждой записи, у которой указанный номер документа, пересмотреть всю таблицу sclad_mlabel. Собственно, именно это у Вас сейчас и происходит


Иванов Сергей   (2004-07-22 09:48:00) [3]

to Sandman25 ©   (22.07.04 09:31) [24]

> Попробуйте [9].
> Необходимы индексы по:
> 1) sclad_mdocm.numdoc;
> 2) sclad_mlabel.grup, sclad_mlabel.nnum.

а без индексов эта перестановка заработать должна?

новые индексы врядли мне дадут создать :-( база итак переиндексируется минут пятьдесят на 2x Xeon2400HT


Иванов Сергей   (2004-07-22 09:44:00) [4]

to bushmen ©   (22.07.04 09:30) [23]

> А когда использовал ADO, то использовал локальный или серверный > курсор?

clUseClient


Sandman25   (2004-07-22 09:31:00) [5]

Попробуйте [9].
Необходимы индексы по:
1) sclad_mdocm.numdoc;
2) sclad_mlabel.grup, sclad_mlabel.nnum.


bushmen   (2004-07-22 09:30:00) [6]

> Иванов Сергей   (22.07.04 09:27) [22]

А когда использовал ADO, то использовал локальный или серверный курсор?


Иванов Сергей   (2004-07-22 09:27:00) [7]

to Соловьев ©   (21.07.04 16:22) [12]
to bushmen ©   (21.07.04 16:23) [13]
to Johnmen ©   (21.07.04 16:32) [14]

кто оно?
И кто он ?
А где она ?

это msquery.exe

to Sandman25

> Данных много? ORDER BY будет создавать временную таблицу для
> сортировки

на выходе сотня-другая строк, а на входе более миллиона


Sandman25   (2004-07-21 17:24:00) [8]

[20] bushmen ©   (21.07.04 17:18)

Представим себе, что я написал парсер, который дублирует имена таблиц в качестве алиасов, и я запускаю его после написания запроса. Понимаю, что это удобно только в том случае, если все поля в таблицах имеют уникальные имена, чтобы не пришлось длинные алиасы указывать. А если мне действительно нужно использовать одну таблицу несколько раз, я потом ручками поправлю. Скажем так: "В использовании такого запроса есть не только недостатки, но и преимущества". Согласен? :)


bushmen   (2004-07-21 17:18:00) [9]

> по ошибке написал from t1, t1.

Я думаю, что как-раз копированием он и наделает ошибок - посмотри на его пост [11]. А ошибиться можно в любом месте, но это не означает, что из-за этого надо городить леса. Достаточно было написать select from t1 a, t2 b


Sandman25   (2004-07-21 17:00:00) [10]

[17] bushmen ©   (21.07.04 16:48)

Конечно, проще. Но если задавать алиас копированием имени таблицы, то опечатки невозможны, точнее они будут обнаружены при Open независимо от возвращаемых данных. Перечитай [16] и представь, что ты хотел написать
from t1, t2, но по ошибке написал from t1, t1.


bushmen   (2004-07-21 16:51:00) [11]

Правда, если поля уникальны, иначе вместо "*" надо поля перечислять


bushmen   (2004-07-21 16:48:00) [12]

> Sandman25 ©   (21.07.04 16:46) [16]

Ты сам-то понял, что написал? :) Не проще ли написать:
select * from t1, t2


Sandman25   (2004-07-21 16:46:00) [13]

А ведь самое смешное, что автор ветки прав. Если
я по ошибке напишу
select *
 from t1 t1,
      t1 t1
то получу ругань Name is not unique in this context.
А если
select *
 from t1,
      t1
то я еще долго буду думать, почем запрос возвращает не то, что я хотел.
Поэтому запросы вида
select
 from t1 t1,
      t2 t2
вполне обоснованы.


Плохиш   (2004-07-21 16:36:00) [14]


> Иванов Сергей   (21.07.04 16:20) [11]
> to bushmen ©   (21.07.04 16:09) [7]
> >А это что такое
>
> А что не так?

Это называется "масло масляное"

> Оно само так построило. когда два раза прицепляешь одну
> таблицу он пишет что то типа
>
> sclad_mdocm sclad_mdocm,
> sclad_mdocm sclad_mdocm_1,

А теперь сравни, что "оно" построило и что ты написал.


Johnmen   (2004-07-21 16:32:00) [15]

А где она ?


bushmen   (2004-07-21 16:23:00) [16]

И кто он ?


Соловьев   (2004-07-21 16:22:00) [17]

кто оно?


Иванов Сергей   (2004-07-21 16:20:00) [18]

to bushmen ©   (21.07.04 16:09) [7]

>А это что такое

А что не так?
Оно само так построило. когда два раза прицепляешь одну таблицу он пишет что то типа

sclad_mdocm sclad_mdocm,
sclad_mdocm sclad_mdocm_1,


Johnmen   (2004-07-21 16:15:00) [19]

>Иванов Сергей  

1. Какие индексы есть ?
2. Поаккуратней с одним и тем же именем для разных параметров...


Sandman25   (2004-07-21 16:14:00) [20]

Еще лучше так:

WHERE
sclad_mlabel.grup = sclad_mdocm.grup AND
sclad_mlabel.nnum = sclad_mdocm.nnum AND
sclad_mdocm.numdoc=:NumDoc AND
sclad_mdocm.delete=0 AND
sclad_mdocm.vid='2' AND
sclad_mdocm.type in ('1', '8')


Страницы:   1 2

Наверх

Титульная страница Поиск, карта сайта Написать письмо