0

全部,

我使用它作为我的选择语句的条件。

WHERE RecDate >= '%s' GROUP BY DATE(RecDate), HOUR(RecDate), MINUTE(RecDate), 
SECOND(RecDate) - (Second(RecDate) \% %d) LIMIT %d

目前,此查询花费的时间有点过长。我在这里尝试做的是在某个日期之后收集 X 行。我也不想要每一行,我想要每第 N 行,我相信这就是 GROUP 部分为我实现的目标。

基本上我有一堆模拟信号被采样并以 1hz(每行)放入数据库。我不想在图表上显示每次大约 4-8 小时的数据,但这没有意义把所有的点拉回来。

我正在尝试尽可能多地利用数据库。有什么办法可以让这个查询运行得更快吗?

问候,肯

这是我的表的创建语句。

DROP TABLE IF EXISTS `vdaq_6`.`readings`;
CREATE TABLE  `vdaq_6`.`readings` (
  `RigId` varchar(15) NOT NULL DEFAULT '',
  `Location` varchar(45) NOT NULL DEFAULT '',
  `RecDate` datetime NOT NULL DEFAULT '0001-01-01 00:00:00',
  `0123` double NOT NULL DEFAULT '0',
  `0124` double NOT NULL DEFAULT '0',
  `0118` double NOT NULL DEFAULT '0',
  `0114` double NOT NULL DEFAULT '0',
  `0126` double NOT NULL DEFAULT '0',
  `0121` double NOT NULL DEFAULT '0',
  `0141` double NOT NULL DEFAULT '0',
  `0137` double NOT NULL DEFAULT '0',
  `1129` double NOT NULL DEFAULT '0',
  `0130` double NOT NULL DEFAULT '0',
  `0108` double NOT NULL DEFAULT '0',
  `0113` double NOT NULL DEFAULT '0',
  `0110` double NOT NULL DEFAULT '0',
  `0116` double NOT NULL DEFAULT '0',
  `0120` double unsigned NOT NULL DEFAULT '0',
  `0112` double NOT NULL DEFAULT '0',
  `0128` double NOT NULL DEFAULT '0',
  `0423` double NOT NULL DEFAULT '0',
  PRIMARY KEY (`RigId`,`Location`,`RecDate`),
  KEY `Index_2` (`RecDate`),
  KEY `replication` (`UpdateCd`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1 COMMENT='v2;InnoDB free: 523264 kB';
4

1 回答 1

0

group by不会每第 N 行都获得;看起来它的意思是对每 N 行求和或求平均值(其中 N 可能是 60 的偶数除数)。

如果你真的想要每 N 行,那可能会快很多;用 RecDate 的顺序替换 group by 并添加 where (second(RecDate) \% %d) == 0。

但请向我们展示正在选择的实际字段。

于 2010-08-02T02:12:11.523 回答