私は例えば、last secods
を選択クエリを作っ:30:今、それは10だ場合は30代と私はlast 20 seconds
を渡し、それが唯一の10:30:10
と10:30:30
間の値を返す必要がありますので、ここにある:タイムスタンプについてSELECTを改善するには?
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秒など)でも長すぎます。
EDIT:
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$$
どうすればもっと速くなるように、このクエリを向上させることができますか?
あなたのテーブルはどのように見えますか?どのように索引付けされていますか? 'EXPLAIN SELECT ... 'の結果を表示することも役に立ちます。 – Wiseguy
ここでは、JPAプロバイダが電信で送信しているSQLをキャプチャし、['EXPLAIN'](http://dev.mysql.com/doc/refman/5.0/en/explain.html )クエリ。結果をここに掲示し、より良い回答を得る可能性があります。 – ig0774
@ウィスジー私の投稿を更新してください、どうぞご覧ください。 –