Форум программистов
 
Регистрация на форуме тут, о проблемах пишите сюда - alarforum@yandex.ru, проверяйте папку спам! Обязательно пройдите активизацию e-mail, а тут можно восстановить пароль

Вернуться   Форум программистов > Delphi программирование > БД в Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме 15-35 тыс рублей в месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 20.08.2009, 00:38   #1
Arkuz
Форумчанин
 
Аватар для Arkuz
 
Регистрация: 22.09.2007
Сообщений: 538
Вопрос В чём разница между запросами и программным обходом записей базы?

Здравствуйте.
Меня всегда интересовал вопрос - Каким образом работают SQL запросы?
Есть ли разница в алгоритмах или во времени выполнения действий?

1. Запрос
Код:
SELECT * FROM BASE WHERE record >5
2. Ручной метод обхода
Код:
BASE.First;
while not BASE.Eof do
 begin
    if BASErecord.Value > 5 then ShowMessage('бла-бла-бла');
    BASE.Next;
 end;
Есть ли в этих действиях различия во времени выполнения или по каким-то другим показателям?
Спасибо...

Последний раз редактировалось Arkuz; 20.08.2009 в 00:40.
Arkuz вне форума Ответить с цитированием
Старый 20.08.2009, 01:18   #2
Black Fregat
Программист
Участник клуба
 
Аватар для Black Fregat
 
Регистрация: 23.06.2009
Сообщений: 1,772
По умолчанию

Ну сам подумай. Если у тебя таблица в базе из 30000 записей, из которых 10 удовлетворяют условию, то в первом случае сервер внутри себя выделит именно эти 10 и отдаст тебе. А во втором случае сервер погонит тебе всю таблицу, чтобы ты мог сам все 30000 записей перебрать.
Black Fregat вне форума Ответить с цитированием
Старый 20.08.2009, 01:25   #3
Баламут
Баламучу слегка...
Участник клуба
 
Аватар для Баламут
 
Регистрация: 01.11.2006
Сообщений: 1,585
По умолчанию

Конечно есть. Dataset кэширует данные с БД. Т.е. запрос тянет данные с сервера (условно) на клиентскую машину. И только после этого ты можешь выполнить цикл по записям. В случае же составления правильного запроса будут возвращены только необходимые данные, а потому сократится время на ненужное копирование (кэширование) и циклический пробег. В случае с большим
количеством данных это очень сильно заметно.

_________
Опоздал...
Баламут вне форума Ответить с цитированием
Старый 20.08.2009, 02:17   #4
Arkuz
Форумчанин
 
Аватар для Arkuz
 
Регистрация: 22.09.2007
Сообщений: 538
По умолчанию

Господа, я это всё прекрасно понимаю...
Меня интересует как происходит выборка данных непосредственно при запросе?
Мне интересно узнать принципы выборок внутренних алгоритмов при SQL запросах. Каким методом запрос выбирает именно то, что мне нужно...

Видимо во внутренней реализации и кроется скорость обработки и экономия времени?
Именно это я и хочу узнать... Внутреннее устройсво алгоритма выборки...
Просто поясните на пальцах что там происходит?

Последний раз редактировалось Arkuz; 20.08.2009 в 02:21.
Arkuz вне форума Ответить с цитированием
Старый 20.08.2009, 06:12   #5
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,260
По умолчанию

Цитата:
Просто поясните на пальцах что там происходит?
Экий Вы смешной...
Разработчики СУБД годами придумывают технологии хранения и доступа данных, чтобы обеспечить быстрый эффективный доступ, а Вы хотите, чтобы Вам на пальцах рассказали.
1) можно почитать хорошие книжки. При поиске обратить внимание на ключевые слова
Индексы и
План запроса

2) общая идея такова - строятся специальные структуры данных, называемые Индексами. (в разных СУБД они внутри организовываются по разному, но принцип один). Поиск нужного значения осуществляется не по самой таблице, а по упорядоченному дереву. Например, ключевое поле. Даже если у Вас таблица на миллионы записей, запрос select * from Таблица where ID = Нужный_ключик отработает за доли секунды!!
Serge_Bliznykov вне форума Ответить с цитированием
Старый 20.08.2009, 11:42   #6
soleil@mmc
SQL-коддинг
Участник клуба
 
Регистрация: 16.01.2009
Сообщений: 1,192
По умолчанию

добавлю
не всегда эффективно выбирать данные, пользуясь индексом
иногда и фулскан быстрее
вот именно об этом и стоит почитать в книжках про индексы - когда стОит использовать индексы, а когда они мешают
soleil@mmc вне форума Ответить с цитированием
Старый 20.08.2009, 15:19   #7
Arkuz
Форумчанин
 
Аватар для Arkuz
 
Регистрация: 22.09.2007
Сообщений: 538
По умолчанию

Благодарен за информацию...
Arkuz вне форума Ответить с цитированием
Ответ
Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
В чём разница между TCP и UDP? TwiX Работа с сетью в Delphi 4 28.07.2009 22:54
в чём разница? Dimarik Общие вопросы C/C++ 1 25.04.2009 20:27
Разница между датами kykysya Общие вопросы Delphi 8 26.03.2009 18:22
Ну тогда скажите здесь в чём разница...? Arkuz Общие вопросы Delphi 4 23.04.2008 20:58
Разница между датами deenka БД в Delphi 3 31.01.2008 13:21