![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
выборка
sqler © (2012-12-19 12:16:00)для таблицы на 10 млн записей, что будет быстрее: три SELECT-запроса (SELECT..FROM..WHERE) или 1 SELECT запрос (SELECT * FROM table) и перебор полученного рекордсета?
sniknik (2012-12-20 15:16:00) [21]> что подтверждает мои слова сказанные
что непонятно в словах "после сохранения"?
т.е. уже когда было обращение и докачка (и так не доходит!? ).
"до", сразу после запроса, там было, не помню и не буду больше проверять что-то около 9 мегабайт (т.е. практически "чистая" прога как после запуска).
в понимании пары слов путаешься а тагие глобальные заявления делаешь.
Ega23 (2012-12-20 15:14:00) [22]
> Я ведь в [2] и не писал что будут закачаны блобы на 100%.
> Хотя скорее всего это так и есть, нет времени ни разбираться
> в этом, ни спорить.
В [2] - нет, в [6] - да.
> stas © (19.12.12 13:09) [6]
>
> sniknik © (19.12.12 13:02) [4]
> 1. Блоб закачивается на клиента полностью
> Считаю все таки мастер должен привести основательные доводы,
> не для меня, для остальных читателей данной ветки.
Тебе привели основательные доводы. Тебе сказали, что ты в своём безапелляционном утверждении неправ. Тебе указали конкретные случаи, когда ты неправ.
Ещё и извиниться надо. И животноводство.
sniknik (2012-12-20 15:10:00) [23]> Считаю все таки мастер должен привести основательные доводы
никто вам ничего не должен. + доводы приведены (против принципа... потому не сразу), "убийственные" доводы..., для тех кто способен понять.
stas (2012-12-20 15:09:00) [24]> По Вашим словам он должен увеличится на несколько байт.
вот это имеется ввиду
> любой размер будет представлен "ссылкой" в пару тройку байт
> (хз. на конкретное значение).
А тут уже 75 мб...
что подтверждает мои слова сказанные в [2], имя блоб поля в таблице и делая выборку в 10 млн. записей можно забить ОЗУ.
sniknik (2012-12-20 15:01:00) [25]> По Вашим словам он должен увеличится на несколько байт.
по моим словам, я не помню на сколько байт... в ответе был смысл, а не конкретные данные. это раз, а два ты вообще читаешь? - после сохраненият.е. когда уже последовательно было обращение и соответственно скачка для локального сохранения.
p.s. это такая "политика"? не сообщать ничего своего только "тянуть" и "опошлять не пониманием" от собеседника... вот из-за такого как то "зарекся" сообщать что-то "до того как первые не начнут"... видимо не зря.
p.p.s. завязываю полемику "как со взрослыми" перехожу обратно к "выкрика с места".
stas (2012-12-20 14:56:00) [26]sniknik © (20.12.12 13:20) [44]
Я ведь в [2] и не писал что будут закачаны блобы на 100%. Хотя скорее всего это так и есть, нет времени ни разбираться в этом, ни спорить.
Можете не искать оправдания, они мне не нужны, просто признайте что были не правы, это не так страшно.
И не правы не в том что не думая напечатали пару строк, а в том что имея значек мастера, который по идеи должен указывать, что к носителю этого значка нужно прислушаться, вводите людей в заблуждение, решив что наличие значка переделает все законы и правила под Вас. И если уж решили кого поправить, то делайте это с умом и уважением.
Считаю все таки мастер должен привести основательные доводы, не для меня, для остальных читателей данной ветки.
Ega23 (2012-12-20 14:53:00) [27]
> По Вашим словам он должен увеличится на несколько байт.
Не факт.
Во-первых, не было сказано, одинаков ли размер у каждой записи.
Во-вторых, всё зависит от того, как эта память не столько в Delphi-компонентах выделяется, сколько в самом OLEDB. И как и когда освобождается.
stas (2012-12-20 14:36:00) [28]
> размер выделенной памяти в диспетчере задач не вылез за
> 75мег.
По Вашим словам он должен увеличится на несколько байт.
sniknik (2012-12-20 13:20:00) [29]> время доставки 20 записей - 2 сек. ... время 30 сек.
уточнение, всего файл типа ADTG получился 250 мегабайт. размер выделенной памяти в диспетчере задач не вылез за 75мег.
вопрос почему? ... ну понятно.
sniknik (2012-12-20 13:15:00) [30]> В настройках надо поковыряться.
не надо. ковыряться нужно в методах определения.
к примеру (раз уж оппонент такой упертый, и от него не дождаться), взял старую таблицу с полем типа image (mssql) делаю запрос
SELECT * FROM Table1
время доставки 20 записей - 2 сек.
после делаю сохранение рекордсета (для сохранение локально должно докачать) время 30 сек.
вопрос почему? если все уже в памяти.
второй пример, делаем "отрывание" рекордсета от коннекта закрываем коннект, пытаемся сохранить рекордсет. ошибка. необходим доступ.
вопрос зачем? если все уже в памяти. и почему он не необходим если в выборке отсутствуют блобы.
???
Ega23 (2012-12-20 12:52:00) [31]
> Заменил MS SQL на Jet 4.0, то-же.
В настройках надо поковыряться.
А в целом - всё зависит от API доступа. Стандарта нет. Посему утверждения, что "BLOBы всегда грузится целиком в рекордсет", а равно как и "BLOBы всегда грузятся в рекордсет по факту обращения к ним" являются неверными.
stas (2012-12-20 12:48:00) [32]Заменил MS SQL на Jet 4.0, то-же.
Так что ваши (sniknik ©) убеждения мне не понятны.
Единственное, за что я читал в книге, так это IBDataSet, подгружает не содержимое блоб поля а его идентификатор.
По поводу оракла видел обсуждения на форуме.
Ega23 (2012-12-20 12:47:00) [33]
> не не не Девид Блейн у тебя неправильная уличная магия .
> .. блоб без "индексного" поля?
Согласен, это я с IBSQL попутал. Я ADO уже лет 5 не касался.
stas (2012-12-20 12:33:00) [34]sniknik © (20.12.12 12:32) [38]
без разницы.
sniknik (2012-12-20 12:32:00) [35]> Выбери его 10 раз:
> select blob from table
не не не Девид Блейн у тебя неправильная уличная магия ... блоб без "индексного" поля? а по чему тогда выборка будет "идентифицироваться"?
обязательно нужно ключевое поле (или "назначенное" на его роль). в одиночном варианте возможно идет попытка установить блоб как идентификатор.
stas (2012-12-20 12:25:00) [36]Inovet © (20.12.12 11:42) [34]
это даже заметно, по скорости открытия DataSet.
stas (2012-12-20 12:22:00) [37]Inovet © (20.12.12 11:42) [34]
У меня есть таблица с блоб полями, сделал open и посмотрел в диспетчере задач расход памяти, потом исключил поле из запроса и сделал тоже самое.
даже без этого:
while not Eof do Next;
Ega23 (2012-12-20 12:09:00) [38]Сделай просто. Засунь в базу блоб на 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;
И посмотри расход памяти.
Inovet (2012-12-20 11:42:00) [39]> [27] stas © (19.12.12 18:33)
> Сделал. Загружает содержимое блобов.
И где ты видишь их содержимое? Или, как советовали, десяток записей с блобами по 20 ГБ немецкого кино в блю-рей качестве загрузил в 4 ГБ памяти и она кончилась?
sniknik (2012-12-20 10:58:00) [40]> котролов нет.
= ты врешь.
> а по поводу 1-й записи не понял.
контрол, если это не грид, "выкачает" только 1 запись за раз, пока не перейдешь на следующую... поэтому при одной записи "методы определения загрузки блобов" могут "страдать неопределенностью".
в гриде, если это какой нибудь "ex..." тоже практикуется "неведомая для прогера докачка" чтобы отобразить рисунки/мемо поля в ячейках, но там тоже нет докачки для не отображаемых... т.е. ситуация таже, что с дбимеджем но распространяется не на 1, а на "гридвидимое" количество записей.