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

Вниз

выборка   Найти похожие ветки 

 
sqler   (2012-12-19 12:16) [0]

для таблицы на 10 млн записей, что будет быстрее: три SELECT-запроса (SELECT..FROM..WHERE) или 1 SELECT запрос (SELECT * FROM table) и перебор полученного рекордсета?


 
Медвежонок Пятачок ©   (2012-12-19 12:38) [1]

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


 
stas ©   (2012-12-19 12:41) [2]

если у вас в table есть блоб поля по 100 мб, то при выборке 10 миллионов записей на клиенте будет забито ОЗУ, следовательно это будет медленее.

если ОЗУ на клиенте сможет принять весь набор, то будет быстрее.

Но опять же в чем заключается задача? какая СУБД? Возможно правильнее выдергивать по 10 тыс. записей и обрабатывать их, таким образом первая обработанная запись появится быстрее чем дождаться получения всех 10 млн, а потом начать обрабатывать. Возможно сделать это в несколько потоков...


 
Ega23 ©   (2012-12-19 13:01) [3]


> если ОЗУ на клиенте сможет принять весь набор, то будет
> быстрее.


Да щаз. Время на передачу данных не тратится, да?


 
sniknik ©   (2012-12-19 13:02) [4]

> если у вас в table есть блоб поля по 100 мб, то при выборке 10 миллионов записей на клиенте будет забито ОЗУ, следовательно это будет медленее.
чушь. блоб поля обрабатываются иначе. любой размер будет представлен "ссылкой" в пару тройку байт (хз. на конкретное значение).

> если ОЗУ на клиенте сможет принять весь набор, то будет быстрее.
еще одна чушь. перебор на клиенте всегда перебор (если не создать индекс, чего по дефаулту нет), а серверная выборка пользуется индексами и обычно они на нужные для выборок условия есть.

> Возможно сделать это в несколько потоков...
лучше бы многозначительно промолчал... кроме ахинеи разной и не сказал ничего.


 
sqler   (2012-12-19 13:09) [5]

СУБД DBISAM (встраиваемая)

бд -  локальная копия бд интернет-магазина, блоб полей в таблицах нет


 
stas ©   (2012-12-19 13:09) [6]

sniknik ©   (19.12.12 13:02) [4]
1. Блоб закачивается на клиента полностью
2. Затраты времени на обработку условия Where (тем более на 10 млн. записей) могут превышать передачу +данных и перебор на клиенте.


 
Медвежонок Пятачок ©   (2012-12-19 13:12) [7]

а в военное время where может и вообще не работать.
так что никаких sql, а только TTable


 
Кщд   (2012-12-19 14:05) [8]

не наблюдая запроса,
не видя структуры таблицы,
не зная о наличии/отсутствии индексов и их селективности
рассуждать об эффективности запроса можно так же долго, как и бестолково)

>stas ©   (19.12.12 13:09) [6]
>1. Блоб закачивается на клиента полностью
правильно понимаю, что запрос: select film_blob_field from my_blueray_films where id = 726, - заполонит ОЗУ, например, 20Гб отборного порно в blueray-качестве?)


 
Плохиш ©   (2012-12-19 14:21) [9]


> stas ©   (19.12.12 13:09) [6]
> sniknik ©   (19.12.12 13:02) [4]
> 1. Блоб закачивается на клиента полностью

Афигеть. Ты только разработчикам баз данных об этом не говори.


 
stas ©   (2012-12-19 14:41) [10]

select film_blob_field from my_blueray_films where id = 726
заполнит столько чему равен размер содержимого film_blob_field для id=726

а если так SELECT * FROM table (как в теме), то затянет все...


 
Кщд   (2012-12-19 14:51) [11]

>stas ©   (19.12.12 14:41) [10]
понял, спасибо
вопросов больше не имею)


 
sniknik ©   (2012-12-19 15:06) [12]

О сколько нам открытий чудных. Готовит просвещенья дух.


 
stas ©   (2012-12-19 15:36) [13]

sniknik ©
Имея значек мастера и делая такие громкие заявления (чушь. блоб поля обрабатываются иначе. любой размер будет представлен "ссылкой" в пару тройку байт), чем вводите разработчиков в заблуждение,
потрудитесь уж привести основания, а также СУБД, способы связи, настройки полей для которых актуально ваше заявление...

А не выкрикивайте, как двоечник с места )


 
stas ©   (2012-12-19 16:00) [14]

Ega23 ©   (19.12.12 13:01) [3]
> Время на передачу данных не тратится, да?

На перекачку тратится ровно как 10 миллионов закачать за 1 раз, так и за 3 раза.
А вот на обработку where тратится еще дополнительное время. т.е. 1 выборка 10 млн. записей быстрее чем 3 выборки такого же кол-ва записей в сумме, даже при наличии индексов и т.д.

А вот чтобы сказать что правильнее надо знать задачу.


 
Медвежонок Пятачок ©   (2012-12-19 16:03) [15]

т.е. 1 выборка 10 млн. записей быстрее чем 3 выборки такого же кол-ва записей в сумме, даже при наличии индексов и т.д.

Остается только придумать зачем автору три where если он в результате их получает всю таблицу.


 
stas ©   (2012-12-19 16:08) [16]

sqler   (19.12.12 12:16)
Или Вам надо найти всего 3 записи из 10 миллионов и вы спрашиваете как это лучше сделать забрать на клиента и искать там или на сервере  условием Where ?


 
Медвежонок Пятачок ©   (2012-12-19 16:14) [17]

нет, йошкин кот.
от тремя where выбирает три трети таблицы.
просто чтобы не скучно было.


 
sniknik ©   (2012-12-19 16:15) [18]

> настройки полей
какие такие настройки? у чего? само слово "blob" означает "бесформенное" т.е. практически нарицательное имя всех не структурных объектов в базе (Memo, Text, OLE, Image, Graphic, Table ... ets.), в общем тех с которыми трудно/иногда невозможно работать структурными методами ("впихнуть в сетку рекордсета" если такая есть конечно).

> потрудитесь уж привести основания
я их привожу, обычно, на такие же с основанием сообщения, а не голословные "ляпы".

> для которых актуально ваше заявление...
для всех... практически для всех. BDE с парадоксом надеюсь считать не будем, да и там сомнительно... ну вернее там механизм запроса другой, с сохранением в файл/возможностью сделать результат перманентным... там... ну чем черт не шутит, возможно, но тормошить "мертвяка" проверками уже лет 7..ххх (уже забл сколько)  как не охота.

> А не выкрикивайте, как двоечник с места )
не изображай из себя учителя... хочешь конкретики говори конкретно, а не как в [2] "обо всем".


 
Inovet ©   (2012-12-19 16:16) [19]

> [13] stas ©   (19.12.12 15:36)
> потрудитесь уж привести основания, а также СУБД, способы
> связи, настройки полей для которых актуально ваше заявление...

Может и ты приведёшь всё это для этого же условия актуальности?


 
stas ©   (2012-12-19 16:41) [20]

sniknik ©   (19.12.12 16:15) [18]

т.е. Если Напишем небольшое приложение.  
возьмем D7, TADODataSet, подключим к MSSQL 2005, впишем запрос в DataSet, типа SELECT TOP 10 IDFIELD, BlobField FROM Table. Не подключая контролов. Запустим приложение.  Откроем в нем датасет. То мы не должны получить большой прирост используемой ОЗУ приложением?

Я перечислил все то, на чем могу проверить, это вроде и не старье и много народу использует эту связку.

Inovet ©   (19.12.12 16:16) [19]
Ну, обычно если кого-то обвиняют, то приводят основания, а не наоборот.
Мне некогда искать могу сделать только вышеописаный пример.


 
Ega23 ©   (2012-12-19 17:26) [21]


> 1. Блоб закачивается на клиента полностью


Да щаз.


 
Inovet ©   (2012-12-19 17:33) [22]

> [20] stas ©   (19.12.12 16:41)
> могу сделать только вышеописаный пример

А ты сделай.


 
Ega23 ©   (2012-12-19 17:33) [23]


> т.е. Если Напишем небольшое приложение.  
> возьмем D7, TADODataSet, подключим к MSSQL 2005, впишем
> запрос в DataSet, типа SELECT TOP 10 IDFIELD, BlobField
> FROM Table. Не подключая контролов. Запустим приложение.
>   Откроем в нем датасет. То мы не должны получить большой
> прирост используемой ОЗУ приложением?


А если мы возьмём IBSQL, то вот незадача, будем каждый блоб по факту получать.


 
Jeer ©   (2012-12-19 18:13) [24]

У ТС СУБД DBISAM - их две разновидности ( К/С и Ф/С ).
Но даже если Ф/С, то блобы на клиент вытягиваются тоже только по факту обращения к конкретному.


 
Jeer ©   (2012-12-19 18:23) [25]

P.S.
При условии, что ТС не закачивает их в массив стримов :)


 
stas ©   (2012-12-19 18:31) [26]

Ega23 ©   (19.12.12 17:33) [23]
Ну, так не зная СУБД зачем утверждать что каждый блоб по факту (СУБД была озвучена позже)?
Защитив себя от ненужной загрузки блоба, это не будет проблемой ни в IBSQL ни в MSSQL.
А грузить блобы в селекте и надеяться на то что будет закачана только ссылка с сервера, то проблемы могут возникнуть.
К стати  в оракле, зависит от компонентов доступа на сколько я знаю.


 
stas ©   (2012-12-19 18:33) [27]

Inovet ©   (19.12.12 17:33) [22]
Сделал. Загружает содержимое блобов.


 
Ega23 ©   (2012-12-19 18:47) [28]


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

Кстати, везде от от компонентов доступа зависит. Если что. Посему безапелляционно утверждать

> stas ©   (19.12.12 13:09) [6]
>
> 1. Блоб закачивается на клиента полностью


это не комильфо.
Равно как и миллионную выборку на клиента тянуть ,сервер для этого и предназначен, с его индексами, шахматами и поэтессами, чтобы данные фильтровать.


 
Игорь Шевченко ©   (2012-12-19 20:59) [29]


> для таблицы на 10 млн записей, что будет быстрее


без разницы


 
stas ©   (2012-12-19 21:08) [30]


> Равно как и миллионную выборку на клиента тянуть

Ну, если цель найти всего 3 записи, то конечно нет смысла тянуть 10 млн. на клиента.
Я изначально решил что он хочет за 3 раза вытянуть те же 10 млн.


 
sniknik ©   (2012-12-20 07:55) [31]

stas ©   (19.12.12 18:33) [27]
> Inovet ©   (19.12.12 17:33) [22]
> Сделал. Загружает содержимое блобов.
опять бездоказательное/не проверяемое заявление в "фирменном" стиле? ну не обижайся тогда, на аналогичное же "выкрикивание с места"
- ты врешь!
конечно, при соблюдении описанных тобой же условий (отсутствия компонента типа DBImage, и 1 записи в результате, потому что даже так выкачается только то что отображается)


 
stas ©   (2012-12-20 10:14) [32]

отсутствия компонента типа DBImage, и 1 записи в результате
котролов нет.
а по поводу 1-й записи не понял.


 
sniknik ©   (2012-12-20 10:58) [33]

> котролов нет.
= ты врешь.

> а по поводу 1-й записи не понял.
контрол, если это не грид, "выкачает" только 1 запись за раз, пока не перейдешь на следующую... поэтому при одной записи "методы определения загрузки блобов" могут "страдать неопределенностью".
в гриде, если это какой нибудь "ex..." тоже практикуется "неведомая для прогера докачка" чтобы отобразить рисунки/мемо поля в ячейках, но там тоже нет докачки для не отображаемых... т.е. ситуация таже, что с дбимеджем но распространяется не на 1, а на "гридвидимое" количество записей.


 
Inovet ©   (2012-12-20 11:42) [34]

> [27] stas ©   (19.12.12 18:33)
> Сделал. Загружает содержимое блобов.

И где ты видишь их содержимое? Или, как советовали, десяток записей с блобами по 20 ГБ немецкого кино в блю-рей качестве загрузил в 4 ГБ памяти и она кончилась?


 
Ega23 ©   (2012-12-20 12:09) [35]

Сделай просто. Засунь в базу блоб на 100 метров.
Выбери его 10 раз:
select blob from table union all select blob from table ... select blob from table

А на клиенте сделай простую вещь:

with TADODataSet.Cerate(nil) do
 try
   Connection := ..;
   CommandText := ...;
   Open;
   while not Eof do Next;
 finally
   Free;
 end;

И посмотри расход памяти.


 
stas ©   (2012-12-20 12:22) [36]

Inovet ©   (20.12.12 11:42) [34]
У меня есть таблица с блоб полями, сделал open и посмотрел в диспетчере задач расход памяти, потом исключил поле из запроса и сделал тоже самое.

даже без этого:
while not Eof do Next;


 
stas ©   (2012-12-20 12:25) [37]

Inovet ©   (20.12.12 11:42) [34]
это даже заметно, по скорости открытия DataSet.


 
sniknik ©   (2012-12-20 12:32) [38]

> Выбери его 10 раз:
> select blob from table
не не не Девид Блейн у тебя неправильная уличная магия ... блоб без "индексного" поля? а по чему тогда выборка будет "идентифицироваться"?
обязательно нужно ключевое поле (или "назначенное" на его роль). в одиночном варианте возможно идет попытка установить блоб как идентификатор.


 
stas ©   (2012-12-20 12:33) [39]

sniknik ©   (20.12.12 12:32) [38]
без разницы.


 
Ega23 ©   (2012-12-20 12:47) [40]


> не не не Девид Блейн у тебя неправильная уличная магия .
> .. блоб без "индексного" поля?

Согласен, это я с IBSQL попутал. Я ADO уже лет 5 не касался.



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

Форум: "Начинающим";
Текущий архив: 2013.09.08;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.56 MB
Время: 0.003 c
15-1364755856
Писатель
2013-03-31 22:50
2013.09.08
Траблы с VBox, установка NC5


15-1364966140
O'ShinW
2013-04-03 09:15
2013.09.08
прехват запросов ODBC к БД (oracle)


15-1364804038
Inovet
2013-04-01 12:13
2013.09.08
Прога для ришения ЕГЭ


2-1356226571
Den
2012-12-23 05:36
2013.09.08
TEMPLATE. Как при создании события в редакторе кода сделать...


15-1364373642
brother_
2013-03-27 12:40
2013.09.08
Ностальгия по OS





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский