У меня есть 200 кешей, загруженных в одну область данных.Среди них у меня есть customerCache с 300K записями.Имеет много проиндексированных полей, включая номер клиента.
Когда я выполняю запрос с использованием SQLFieldsQuery в этом конкретном кэше (где условие имеет только номер клиента =?), Для запроса клиента требуется около 280мс !
При детальном анализе я обнаружил, что SQLFieldQueryCursor.getAll () потребляет 99% времени (получение экземпляра кэша и выполнение запроса завершается с интервалом от 1 нс до 1 мс).Есть ли способ настроить cursor.getAll () или любой альтернативный способ получить данные из курсора.
Дополнительная информация
Я аннотировал номер клиента с помощью @Id, поэтому предположим, что он был проиндексирован, а все запрашиваемые поля аннотированы с помощью @ QuerySqlField
CacheКонфигурация указана ниже:
dataRegionCfg.setInitialSize(8L * 1024 * 1024 * 1024);
dataRegionCfg.setMaxSize(8L1024*1024);
dataRegionCfg.setPersistenceEnabled(false);
dataStorageCfg.setDataRegionConfigurations(dataRegionCfg);
dataStorageCfg.setPageSize(4096);
customerCacheConfig = new CacheConfiguration<>("customerCache");
customerCacheConfig.setIndexedTypes(CustomerKey.class, Customer.class);
customerCacheConfig.setReadThrough(false);
customerCacheConfig.setAtomicityMode(ATOMIC);
customerCacheConfig.setCacheMode(CacheMode.LOCAL);
Мой запрос был:
select customerName,customerId from CustomerMaster where customerNumber = ?;
*1024* Пожалуйста, дайте несколько советов по улучшению производительности или дайте мне знать, если я что-то здесь упустил.