私は200人のpowermetersの1分あたりの記録を取ろうとしています。各powermeterにはuniqueid(pmid)があります。スキーマは次のようである:mysql DBに分単位のデータを効果的に保存して検索するには?
CREATE TABLE `pmd` (
`datatime` datetime NOT NULL,
`pmid` smallint(5) unsigned NOT NULL,
`statusid` tinyint(3) unsigned NOT NULL,
`I1` double NOT NULL,
`I2` double NOT NULL,
`I3` double NOT NULL,
`I0` double NOT NULL,
PRIMARY KEY (`datatime`,`pmid`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
私のユースケースは、毎日(ここで、時間&分= 0)、および月次レコード(日= 1 &時間&分= 0)、(ここで、分= 0)時給取得している
の特定のpowermeter。
最初の2か月では、クエリが機能し、高速です。しかし、レコードが増えるほど、クエリ時間は非常に遅くなります。
私はパフォーマンスを改善するための意見を聞きたいと思いますか? 私の心の中でいくつかの考えがあります。各月の
`year_2digit` tinyint NOT NULL,
`month` tinyint NOT NULL,
`day` tinyint NOT NULL,
`hour` tinyint NOT NULL,
`minute` tinyint NOT NULL,
2.create新しいテーブル:別々のフィールドへ 1.changeの日時は次のように。 更新:今日私はウェブ上でもっと多くを読んでいました。私はそれがスキーマを変更しないので、それに興味があります。私は年と月に分割したいと思います。私はパーティショニングについてあなたの意見もありますか?
代わり
`year_2digit` tinyint
の私は
`year` year
YEARデータ型を使用するのと同じストレージ・サイズを持っています
問題がインデックスの不足のように見える – Strawberry
あなたのMySQLのバージョンは何ですか?あなたの質問は何ですか? –
私のMySQLバージョンは5.7.18です。私は通常これを使用して1時間ごとのレコードを見つけます:select * from pmdここでpmid = 2、データタイム( '2017-04-01 00:00'、 '2017-04-01 00:01'、...、 '2017 -04-01 23:59 ')制限1440; – marco