-1

以下のクエリを実行して、テーブルから毎日のユーザーサインインの詳細を取得しています。サンプルテーブルと実行中のクエリを投稿しました。

問題

私のクエリはrange、テーブル全体を調べるクエリとして実行されていません。私にとっては遅くなります。ミリ秒単位のタイムスタンプ間に大きな違いがないため、タイムスタンプ列にインデックスを付けると役に立ちません。製品が実稼働環境にあるため、テーブルのタイムスタンプ列にインデックスを付けることができませんでした。何百万もの行が含まれます。このクエリをrange1つまたはより良いソリューションとしてどのように実行できますか?

MYSQLテーブル +---------------+ ------------------------------- -------------------------------------------------- -------------------------------------------------- -------------------------------------------------- --+ | テーブル| テーブルの作成|

+---------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| SignInDetails | CREATE TABLE `SignInDetails` (
  `USER_ID` bigint(20) DEFAULT NULL,
  `UserName` char(200) DEFAULT NULL,
  `TIMESTAMP` bigint(20) DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=latin1 |
+---------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+

クエリ

select USER_ID,TIMESTAMP from SignInDetails where TIMESTAMP 
between UNIX_TIMESTAMP(CURRENT_DATE()-INTERVAL 1 DAY)*1000 and 
UNIX_TIMESTAMP(CURRENT_DATE())*1000

出力の説明

    +----+-------------+---------------+------+---------------+------+---------+------+------+-------------+
| id | select_type | table         | type | possible_keys | key  | key_len | ref  | rows | Extra       |
+----+-------------+---------------+------+---------------+------+---------+------+------+-------------+
|  1 | SIMPLE      | SignInDetails | ALL  | NULL          | NULL | NULL    | NULL |   21 | Using where |
+----+-------------+---------------+------+---------------+------+---------+------+------+-------------+

テーブル内の合計行

21

4

1 に答える 1

0

desc出力は、それtimestampがインデックス付きの列であることを示していません。DDLを提供して、実際にそのインデックスを作成していることを確認できますか?

または、2つの列を使用して、タイムスタンプをミリ秒の解像度で保存することもできます。1つは検索に使用され、もう1つは追加の解像度に使用されます。私は組み合わせを想像することができます:datetime/ msecdate/ bigint-msecdatetime/ bigint-msec。実際の組み合わせは、最も頻繁に使用されるクエリの種類によって異なります。

于 2012-10-12T20:19:36.413 に答える