Я получаю последнюю запись даты (одиночную) среди 100k записей.Я хочу, чтобы время ответа на запрос было быстрее.
Я пробовал использовать два решения, упомянутых ниже, причем оба требуют много времени для ответа.
Решение 1:
DetachedCriteria maxDate = DetachedCriteria.forClass(EventData.class);
maxDate.add(Restrictions.eq("device", device));
maxDate.setProjection(Projections.max("dateTime"));
Criteria eventDataCreCriteria = this.sessionFactory.getCurrentSession().createCriteria(EventData.class, "e").createAlias("e.device", "d").createAlias("d.deviceList", "dl");
eventDataCreCriteria.add(Restrictions.eq("device", device));
eventDataCreCriteria.add(Property.forName("dateTime").eq(maxDate)); //line 1
eventDataCreCriteria.setMaxResults(1);
EventData eventData = (EventData) eventDataCreCriteria.uniqueResult();
Решение 2:
Criteria eventDataCreCriteria = this.sessionFactory.getCurrentSession().createCriteria(EventData.class, "e").createAlias("e.device", "d").createAlias("d.deviceList", "dl");
eventDataCreCriteria.add(Restrictions.eq("device", device));
eventDataCreCriteria.addOrder(Order.desc("dateTime")); //line 2
eventDataCreCriteria.setMaxResults(1);
EventData eventData = (EventData) eventDataCreCriteria.uniqueResult();
Если я удаляю строки 1 и 2 из обоих решений, тогда он начинает реагировать слишком быстро, но затем не получает последнюю датузаписей.
Мне нужна только одна последняя запись даты с меньшим временем отклика.