0

全て、

これを select ステートメントの条件として使用しています。

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

現在、このクエリは少し時間がかかりすぎています。ここでやろうとしているのは、特定の日付の後に X 行を収集することです。また、すべての行が必要なわけではなく、N 番目の行ごとに必要です。これは、GROUP セクションが達成していると私が信じていることです。

基本的に、サンプリングされて1hz(各行)でDBに入れられるアナログ信号がたくさんあります.1時間あたり約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行ごとに必要な場合は、はるかに高速になる可能性があります。group by を RecDate による順序に置き換え、where (second(RecDate) \% %d) == 0 を追加します。

しかし、実際に選択されているフィールドを見せてください。

于 2010-08-02T02:12:11.523 に答える