Отправляет email-рассылки с помощью сервиса Sendsay

RFpro.ru: СУБД и Delphi/Lazarus

  Все выпуски  

RusFAQ.ru: СУБД и Delphi


Новое направление Портала RusFAQ.ru:
MosHoster.ru - Профессиональный хостинг

РАССЫЛКИ ПОРТАЛА RUSFAQ.RU

/ КОМПЬЮТЕРЫ И ПО / Языки программирования / СУБД и Delphi

Выпуск № 433
от 26.12.2007, 23:35

Администратор:Gh0stik
В рассылке:Подписчиков: 301, Экспертов: 30
В номере:Вопросов: 1, Ответов: 2

Нам важно Ваше мнение об этой рассылке.
Оценить этот выпуск рассылки >>


Вопрос № 115308: Здравствуйте. Подскажите, пожалуйста. Есть таблицы, в каждой из которых порядка 2-3млн. записей. Хотелось бы чтобы не чувтвовалось замедления приотображении в DBGrid'ах и т.п. Куда следует копать? В сторону параллельного процесса? Или в запросы S...

Вопрос № 115.308
Здравствуйте. Подскажите, пожалуйста. Есть таблицы, в каждой из которых порядка 2-3млн. записей. Хотелось бы чтобы не чувтвовалось замедления приотображении в DBGrid'ах и т.п.
Куда следует копать? В сторону параллельного процесса? Или в запросы SQL? Тогда как выбрать, например, с 100 по 200й элемент?
Таблицы .mdb
Отправлен: 21.12.2007, 23:16
Вопрос задал: Alexey Ku (статус: 1-ый класс)
Всего ответов: 2
Мини-форум вопроса >>> (сообщений: 11)

Отвечает: Selya
Здравствуйте, Alexey Ku!

Таблицы .mdb

Это судя по всему Access. Здесь следует копать в стороу запросов SQL.

Как выбрать, например, с 100 по 200й элемент?

SELECT * FROM MyTable
WHERE Id >=100 AND Id <=200
Ответ отправил: Selya (статус: 2-ой класс)
Ответ отправлен: 21.12.2007, 23:43
Оценка за ответ: 2
Комментарий оценки:
может я чего не понял, но Id там нет, да и считывать надо по порядку, а не ждать поиска через всю базу.

Отвечает: Виктор Пырлик
Здравствуйте, Alexey Ku!

Никто не работает с таким количеством записей. Оптимально – 2-3 «экрана», в идеале 1 «экран».
С одной стороны, снижается нагрузка на сеть (для сетевой работы) и исключается бесполезное расходование ресурсов в случае локальной работы, к тому же, человек не в состоянии работать с таким количеством информации.
Исходя из этого, строят различными методами интерфейс пользователя (куда, в том числе, входят и визуальные компоненты отображения данных).
В частности, два основных – фильтрация данных и запрос. Эти методы напрямую связаны с используемыми компонентами... В частности, не смотря на то, что с таблицами (TTable, TADOTable и т.д.) работать «проще», они получают полный набор данных, другие же компоненты (запросы, процедуры) работают с ограниченным набором, полученным с сервера (а Access или Oracle – не важно тут), т.е. вы всегда имеете только те данные, которые актуальны и которые реально могут быть обработаны.
Можно конечно нагромоздить код, переложив работу СУБД в приложение, но это не лучший вариант.
Оптимально будет реализовать логику на сервере (а база как раз и является в данном случае «сервером» ) - сформировать «въюшки», т.е. View – просмотры, которые фильтруют данные по определенным условиям, в том числе и с параметрами – аналог процедур SQL... Эти сохраненные на сервере запросы в приложении можно использовать как простые таблицы, но при этом – мы получим только необходимые записи. Тут важно учесть – запросы могут быть редактируемыми, если нет пересечений, т.е. используется одна таблица, или можно однозначно идентифицировать запись для одной таблицы – проще говоря, все запросы построенные на одной таблице и не имеющие агрегатных данных а только отфильтрованные – являются редактируемыми.

Таки образом, ответов на ваш первый вопрос является: используйте ограниченный набор данных, за счет организованных в базе View (просмотров), используйте процедуры (в случае с параметрами), Используйте SQL запросы с условием (TADOQuery).

По второму вопросу: «с 100 по 200й элемент» - бессмысленные данные, т.к. любые данные являются информацией и следовательно, идентифицируются не порядком следования (который может быть изменен в результате сортировки) а собственным значением – вот по нему и надо делать выборку. Если у вас 1 млн однотипных гаек... то какая разница, какие отобрать... а вот если они имеют различную марку или диаметр – то выборка SELECT * FROM ГАЙКА WHERE ДИАМЕТР BETWEEN 12 AND 32 – вернет все записи/гайки с диаметром от 12 до 32.

PS: Access совершено не подходит для таких объемов данных, это будет работать медленно в любом случае.

---------
Если ничего не помогло - надо читать инструкцию
Ответ отправил: Виктор Пырлик (статус: Специалист)
Ответ отправлен: 22.12.2007, 00:16
Оценка за ответ: 4
Комментарий оценки:
Однако, запросы естественно будут формироваться, но не хочется ждать по несколько минут чтобы посмотреть в середину базы. Ведь задача конечная есть грамотная поэлементная фильтрация на полуавтомате насколько это возможно, а уже потом формирование из фильтрованых таблиц связей и т.п. Формировать ComboBox можно и вручную, но как с 2000-го элемента считать сотню?


Вы имеете возможность оценить этот выпуск рассылки.
Нам очень важно Ваше мнение!
Оценить этот выпуск рассылки >>

Отправить вопрос экспертам этой рассылки

Приложение (если необходимо):

* Код программы, выдержки из закона и т.п. дополнение к вопросу.
Эта информация будет отображена в аналогичном окне как есть.

Обратите внимание!
Вопрос будет отправлен всем экспертам данной рассылки!

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


Форма НЕ работает в почтовых программах The BAT! и MS Outlook (кроме версии 2003+)!
Чтобы отправить вопрос, откройте это письмо в браузере или зайдите на сайт RusFAQ.ru.


© 2001-2007, Портал RusFAQ.ru, Россия, Москва.
Авторское право: ООО "Мастер-Эксперт Про"
Техподдержка портала, тел.: +7 (926) 535-23-31
Хостинг: "Московский хостер"
Поддержка: "Московский дизайнер"
Авторские права | Реклама на портале
Версия системы: 4.66 от 23.12.2007
Яндекс Rambler's Top100
RusFAQ.ru | MosHoster.ru | MosDesigner.ru | RusIRC.ru
Kalashnikoff.ru | RadioLeader.ru | RusFUCK.ru

В избранное