Перейти к содержанию
Fire Monkey от А до Я
  • 0

Как увеличить скорость отработки запроса SQL к базе SQLLite


masmat

Вопрос

Есть база SQLLite, 202 записи, 27 полей (столбцов). Объем 1,9 мб

Разработка в Delphi 10 Seatle Проекты для Android  и iOS отдельные, лишних модулей (разных платформ) нет.

SDK последних версий.

 

Есть запрос

select distinct Cat1 from client where Tip="s"  Order By Cat1

Результат запроса 12 записей, которые потом заполняются в ListView

      LV.BeginUpdate;
      LV.Items.Clear;

        while not Query.Eof do
          begin
              LItem := LV.Items.Add;
              LItem.Text := Query.FieldByName('Cat1').AsString;
              Query.Next;
           end;
      LV.EndUpdate;

Вопрос:

В первый раз запрос и заполнение ListView отрабатывается в течении 4-5 секунд. В следующий раз все отрабатывает за 1 секунду.

и так с каждым запросом.

 

Почему так происходит? Может кто-нить решал уже такую проблему?

Данное поведение наблюдается и на Android, и на iOS.

 

 

 

 

 

 

Ссылка на комментарий

Рекомендуемые сообщения

  • 0
 запрос и заполнение ListView

 

 

почему-то мне кажется, что заполнение ListView происходит мгновенно

уточните, что съедает время - открытие датасета или все-таки подключение к БД?

Ссылка на комментарий
  • 0

 

 запрос и заполнение ListView

 

 

почему-то мне кажется, что заполнение ListView происходит мгновенно

уточните, что съедает время - открытие датасета или все-таки подключение к БД?

 

Подключение к БД происходит один раз, при первом обращении к ней. Так, что постоянного запроса на подключение нет.

 

Скорее всего это открытие датасета.

А есть ли вообще в мобильной платформе какое-нить ограничение скорости по чтению жесткой памяти?

Ссылка на комментарий
  • 0

 

Стоит спросить и про индексы. Имеются ли они, используете ли вы их? И если они есть, какого типа индексы?

 

Нет, индексы не использую.

 

Ну а почему? Может как раз в этом и разгадка? Попробуйте! И лично использую индекс типа NOCASE ASC. Не знаю как у вас, но у меня базу, более чем в 30 тыс строк, запрос ускорился с 7 секунд до 0,1 

Ссылка на комментарий
  • 0

Хотя меня смущает ваш вопрос, всего 202 записи, это очень мало, что бы так медленно открывалось(

 

Вот в том то и дело, с таким кол-вом записей индексы не спасут.

Тем более, что запрос идет по одному полю, а не по всей БД.

 

У меня есть сомнения на счет скорости обращения к файлу БД, т.к. он лежит на жестком диске. При выполнении запроса процессор можно сказать вообще не используется

Ссылка на комментарий
  • 0

Ну попробуйте все таки их поставить! Отпишитесь.

 

PS а лично использую для подключения компоненты от devart поэтому по вашему коннекту не подскажу. Попробуйте скачать пробную версию devart и сравнить.

Ссылка на комментарий
  • 0

Ну попробуйте все таки их поставить! Отпишитесь.

 

PS а лично использую для подключения компоненты от devart поэтому по вашему коннекту не подскажу. Попробуйте скачать пробную версию devart и сравнить.

 

Дык вот как-то не хочется использовать сторонние компоненты, потом трудно "переезжать" на новые версии Delphi.

Один проект VLC так и остался на Delphi 2010 из-за этого, что очень печально.

Ссылка на комментарий
  • 0

 

Ну попробуйте все таки их поставить! Отпишитесь.

 

PS а лично использую для подключения компоненты от devart поэтому по вашему коннекту не подскажу. Попробуйте скачать пробную версию devart и сравнить.

 

Дык вот как-то не хочется использовать сторонние компоненты, потом трудно "переезжать" на новые версии Delphi.

Один проект VLC так и остался на Delphi 2010 из-за этого, что очень печально.

 

Попробуйте поставить на поле cat1 индекс типа NOCASE ASC

Ссылка на комментарий
  • 0

отпишитесь о результате, просто стало интересно))

 

Вообщем вроде как добрался до сути. Поставил секундомер на все операции и как оказалось, я зря грешил на БД.

В итоге самым затратным по времени оказалось создание и отрисовка формы.

post-1420-0-88441300-1455307611.png

Как видно на картинке, с момента нажатия на кнопку (Начали) до факта создания формы (Создали форму) прошло ЦЕЛЫХ 5 секунд (иногда доходило до 8 секунд)

 

Все остальные операции, включая: замену файла БД из ресурса, выполнение запроса, заполнение и отрисовка ListView, установка видимости 4 Label (зависит от типа запроса) выполнились за 1 секунду.

 

В итоге, вопрос по тормозам БД снят. Возникает теперь вопрос в увеличении скорости создания формы.

 

Ну и конечно 2-е и более нажатия на кнопку отрабатывают менее чем за 1 секунду.

 

Состав формы:

  • 1 TabControl + 3 Закладки
  • 3 ListView
  • 5 Rectangle
  • 5 Label
  • 1 CheckBox

И вот на создание этого уходит 5-8 секунд. Бедаааааа

Ссылка на комментарий
  • 0

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

Ссылка на комментарий
  • 0
  • Модераторы

Попробуйте, как уже писали выше, использовать формы/фреймы. И ещё, как вариант, не создавать сразу все визуальные компоненты на вкладках, т.е. делать это только когда необходимо.

Ссылка на комментарий
  • 0

у меня фреймы отдельные создаются при переходе на конкретную вкладку

на mainstream 1.3 GHz смарте под андроид времени на создание форм уходит совершенно незначительное кол-во

Ссылка на комментарий
  • 0

Всем спасибо за советы.

Вообщем результаты.

 

Оставил на форме:

  • 1 TListView
  • 2 TRectangle
  • 1 TCheckBox
  • 1 TLabel

+ Почистил раздел USES от ненужных вещей

 

Скорость создания формы, заполнения LiistView  и открытие сократилось до 1 сек.

 

Т.О. получается, что нужно очень сильно минимизировать кол-во контролов на формах.

Ссылка на комментарий
  • 0

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

 

Вроде в RX есть изменения в этом. В одном проекте с табами положение элементов рассчитывал при создании формы. И при переходе на RX все это "развалилось". Пришлось на скорую руку переделывать. Как раз решил, что для оптимизации алгоритм изменили. Но подробно не разбирался.

Ссылка на комментарий

Присоединяйтесь к обсуждению

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

Гость
Ответить на вопрос...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...