環境:CentOS7、mariadb10.2
以下のフォーマットのテーブルがあります。
■TEST_TABLE
NUMBER int(8) AutoIncrement
DATETIME datetime
VALUE int(10)
テーブルには4から6秒置き(処理時間により多少前後する)にリアルタイムでデータを挿入しています。テーブルには最大30日分/50万件近くのデータが入っています。処理の中で「もっとも1分前に近いVALUEを取り出す」ことをしたいのですが、うまく速度が出ません。
□試したSQL
select VALUE from TEST_VALUE where DATETIME<'%s' order by NUMBER desc LIMIT 1
※%sには現在1分前の日付時刻
上記SQLではCerelonの開発機で試したところ、1回のSelectに0.1秒ほどかかってしまっています。
DATETIMEにindexを貼ってみましたがあまり効果がありませんでした。
回避策として「LIMIT句で、現在からさかのぼって15件拾ってから、その15件でループをまわして1分前のデータを取得する」ようにしたところ、0.01秒まで短縮できました。が、処理として美しくなく、1時間前となるとそのまま使えず、まだ早くなる余地があると思っています。
どなたか、アドバイスをお願いします。

回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2018/01/16 01:16
2018/01/16 01:40
2018/01/16 06:53