1

ID、タイムスタンプ、文字列の3つの列を持つデータベーステーブルがあります。毎日約14,000行が挿入されるため、テーブルは非常に大きくなります。現在、130万行あります。

テーブル定義:

CREATE TABLE readings (
  id int primary key auto_increment,
  ts datetime not null, --the timestamp
  json text not null --the string
);

私が実行しているクエリは次のとおりです。

SELECT * FROM readings WHERE ts >= 'TIME_START' AND ts <= 'TIME_END' ORDER BY ts

クエリの実行には約45秒かかります。テーブルやクエリを変更して高速化するにはどうすればよいですか?

ありがとう。

4

4 に答える 4

5

テーブルに新しいインデックスを追加しtsます。

于 2013-02-01T15:23:55.517 に答える
1

私の頭に浮かぶのは、すべてが正しく設定されていることを前提としたパーティションだけです。また、別のデータベースエンジン(InnoDBなど)を試してみることもできます。または、ts列にインデックスを設定します。

それ以外は、> = <= vs BETWEENを使用してもパフォーマンスに影響はないので、心配する必要はありません。

于 2013-02-01T15:32:17.557 に答える
0

自動インクリメントであるプライマリIDを使用して結果を並べ替えることができます。

于 2013-02-01T15:24:54.870 に答える
0

以下のクエリを試してください。インデックスがidにある場合、これはより高速である可能性があります

declare @min_id as int
declare @max_id as int

select @min_id = min(id)
from readings WHERE ts = 'TIME_START' 

select @max_id = max(id)
from readings WHERE ts = 'TIME_END'

SELECT * FROM readings  
id between @min_id and @max_id order by id
于 2013-02-01T15:30:43.420 に答える