Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Базы";
Текущий архив: 2004.08.15;
Скачать: [xml.tar.bz2];

Вниз

Выборка из большой базы   Найти похожие ветки 

 
Иванов Сергей   (2004-07-21 15:11) [0]

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

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

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

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


 
Соловьев ©   (2004-07-21 15:12) [1]


>  неё немного  данных.


> там индексы есть,

покажите условия отбора и индексы


 
Johnmen ©   (2004-07-21 15:12) [2]

>нужно выбрать из неё немного  данных.

Какой критерий небольшого выбора ?


 
Иванов Сергей   (2004-07-21 15:57) [3]

to Соловьев ©   (21.07.04 15:12) [1]

покажите условия отбора и индексы

индексов там много. в принципе есть и такие по которым я бы поискал.

Johnmen ©   (21.07.04 15:12) [2]

Какой критерий небольшого выбора ?

На самом деле это БЕСТ5, таблица со строками накладных
выборка документов. В самой системе выборка делается средствами фокспра, процедура целая. то есть ручками. без sql. А мне надо сделать тоже самое но из вне. если бы какая то технология позволяля осуществлять поиск по этим индексам это было бы идеально. Но что-то меня сомнения терзают.

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


 
Соловьев ©   (2004-07-21 16:01) [4]


> индексов там много. в принципе есть и такие по которым я
> бы поискал.

это типа ответ: сам дурак:)


 
Johnmen ©   (2004-07-21 16:01) [5]

Тем не менее
>это были query
Какие ? Вот где рыть надо...:)


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

> это типа ответ: сам дурак:)

нет,:-) просто мне кажется дело не в конкретном тексте, а в технологии.

> Какие ? Вот где рыть надо...:)

Вот такой.

SELECT
 sclad_mdocm.delete,
 sclad_mdocm.numdoc,
 sclad_mdocm.nnum,
 sclad_mlabel.grup,
 sclad_mlabel.name,
 sclad_mdocm.kol,
 sclad_mdocm.cenaout,
 sclad_mdocm.sumout,
 sclad_mdocm.nds,
 sclad_mdocm.sum_nds
FROM
 sclad_mdocm sclad_mdocm,
 sclad_mlabel sclad_mlabel
WHERE
 sclad_mlabel.grup = sclad_mdocm.grup AND
 sclad_mlabel.nnum = sclad_mdocm.nnum AND
 ((sclad_mdocm.vid="2") AND
 (sclad_mdocm.type="1") AND
 (sclad_mdocm.numdoc=:NumDoc) AND
 (sclad_mdocm.delete=0) OR
 (sclad_mdocm.vid="2") AND
 (sclad_mdocm.type="8") AND
 (sclad_mdocm.numdoc=:NumDoc) AND
 (sclad_mdocm.delete=0))
ORDER BY
 sclad_mlabel.grup, sclad_mlabel.nnum;


 
bushmen ©   (2004-07-21 16:09) [7]

> FROM
sclad_mdocm sclad_mdocm,
sclad_mlabel sclad_mlabel


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


 
Sandman25 ©   (2004-07-21 16:12) [8]

С таким запросом индексы отдыхают :)
Нужно так:
...
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="1")
OR
(sclad_mdocm.vid="2") AND
(sclad_mdocm.type="8")
)

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


 
Sandman25 ©   (2004-07-21 16:14) [9]

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

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")


 
Johnmen ©   (2004-07-21 16:15) [10]

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

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


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

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

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

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

sclad_mdocm sclad_mdocm,
sclad_mdocm sclad_mdocm_1,


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

кто оно?


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

И кто он ?


 
Johnmen ©   (2004-07-21 16:32) [14]

А где она ?


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


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

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

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

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


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

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


 
bushmen ©   (2004-07-21 16:48) [17]

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

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


 
bushmen ©   (2004-07-21 16:51) [18]

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


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

[17] bushmen ©   (21.07.04 16:48)

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


 
bushmen ©   (2004-07-21 17:18) [20]

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

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


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

[20] bushmen ©   (21.07.04 17:18)

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


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

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 будет создавать временную таблицу для
> сортировки

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


 
bushmen ©   (2004-07-22 09:30) [23]

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

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


 
Sandman25 ©   (2004-07-22 09:31) [24]

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


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

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

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

clUseClient


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

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

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

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

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


 
Sandman25 ©   (2004-07-22 09:54) [27]

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

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


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

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.



Страницы: 1 вся ветка

Форум: "Базы";
Текущий архив: 2004.08.15;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.52 MB
Время: 0.036 c
4-1089216135
NLO
2004-07-07 20:02
2004.08.15
Свая консоль


6-1087196537
Separator
2004-06-14 11:02
2004.08.15
закачка на FTP


1-1091010419
Марковка
2004-07-28 14:26
2004.08.15
Treeview


14-1091012470
juiceman
2004-07-28 15:01
2004.08.15
Драйвера, оборудование


14-1090481423
CHES
2004-07-22 11:30
2004.08.15
пример использования интерфейсов





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский