たとえば、を選択するクエリを作成しましたlast secods
。現在は 10:30:30 で、 を渡すと、 と の間でlast 20 seconds
のみ値が返されるはずです。したがって、次のようになります。10:30:10
10:30:30
public List<Log> listLastSeconds(Integer id_point, int seconds) {
Calendar calendar = Calendar.getInstance();
calendar.add(Calendar.SECOND, -seconds);
Date today = new Date();
Date lastSeconds = calendar.getTime();
Query query = em.createQuery("SELECT l FROM Log l WHERE l.point.id =:id AND l.time >= :lastSeconds AND l.time <= :today", Log.class);
query.setParameter("id", id_point);
query.setParameter("lastSeconds", lastSeconds);
query.setParameter("today", today);
return query.getResultList();
}
しかし、このクエリは、10 秒などのわずかな違いでも時間がかかりすぎます。
編集:
CREATE TABLE `log` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`id_point` int(11) NOT NULL,
`value` varchar(10) NOT NULL,
`time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
PRIMARY KEY (`id`),
KEY `fk_point_id` (`id_point`),
CONSTRAINT `fk_point_id` FOREIGN KEY (`id_point`) REFERENCES `point` (`id`) ON DELETE NO ACTION ON UPDATE NO ACTION
) ENGINE=InnoDB AUTO_INCREMENT=9360244 DEFAULT CHARSET=latin2$$
このクエリをより高速に改善するにはどうすればよいですか?