Components for Delphi and C++ Builder.

Перейти в английский форум
Перейти на EhLib.com
Текущее время: 27 апр 2024, 08:40

Часовой пояс: UTC




Начать новую тему Ответить на тему  [ Сообщений: 3 ] 
Автор Сообщение
 Заголовок сообщения: Индексы в TMemTableEh
СообщениеДобавлено: 06 июл 2022, 19:56 
Не в сети

Зарегистрирован: 24 дек 2012, 11:18
Сообщений: 77
Подскажите, пожалуйста, в каких ситуациях использование индексов в TMemTableEh ускоряет работу с MemTable, а не замедляет.

Тестировал на рабочих данных, где TMemTableEh подключен к TFDQuery через TDataSetDriverEh.
Количество записей: 17000
Перед открытием MemTable я вручную создал индекс по 3 полям - "BEGINDATE;ENDDATE;EMPLOYEENAME".
При выполнении локальной сортировки (SortByFields) по этим же полям она выполняется в среднем за 1430 мск, если индекс не создавать - за 104 мск.
Т.е. без индекса сортирует в 13 раз быстрее. Всё потому, что после сортировки этот индекс заново перестраивается.

При этом Locate в MemTable по любым полям выполняется одинаково быстро что с индексом, что без.

Поэтому вопрос, в каких случаях пользы от вручную добавленных индексов будет больше, чем вреда. В руководстве разработчика указано, что индексы "используются при формировании древовидной структуры записей, в процедуре Locate и в MasterDetail отношениях". Но на практике влияние индекса на скорость Locate не установлено. MasterDetail не используется, нет возможности проверить.
Заранее большое спасибо!

P.S. EhLib 10.1.029


Вернуться наверх
 Профиль  
 
 Заголовок сообщения: Re: Индексы в TMemTableEh
СообщениеДобавлено: 07 июл 2022, 00:04 
Не в сети

Зарегистрирован: 21 дек 2011, 18:48
Сообщений: 1549
Добрый день.


1. Про сортировку
Метод SortByFields не использует индексы для ускорения операции сортировки, но пересоздает индексы, т.к. пересоздается массив записей.
Чтобы массив записей не пересоздавался используйте свойство SortOrder (MemTableEh2.SortOrder := 'FieldName'). Но SortOrder сам по себе работает немного медленнее.

2. Про Locate
На компьютере с процессором i7-9700K или новее наличие индекса при использовании оператора Locate становится заметным при количестве записей больше 100’000.

_________________
Best regards
EhLib support Team


Вернуться наверх
 Профиль  
 
 Заголовок сообщения: Re: Индексы в TMemTableEh
СообщениеДобавлено: 07 июл 2022, 12:15 
Не в сети

Зарегистрирован: 24 дек 2012, 11:18
Сообщений: 77
Спасибо Вам большое, стало понятней в чём причина и как в этом случае правильней использовать индексы.

Отдельное спасибо за такой быстрый ответ!
Эх, если б ещё и с моим предыдущим вопросом порадовали... 3 недели как...


Вернуться наверх
 Профиль  
 
Показать сообщения за:  Сортировать по:  
Начать новую тему Ответить на тему  [ Сообщений: 3 ] 

Часовой пояс: UTC


Кто сейчас на форуме

Сейчас этот форум просматривают: Bing [Bot] и гости: 10


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  
Powered by phpBB® Forum Software © phpBB Group
Русская поддержка phpBB