-2

TABLEユーザーユーザーテーブル構造。

    mysql> desc User;
+--------------+--------------+------+-----+---------+----------------+
| Field        | Type         | Null | Key | Default | Extra          |
+--------------+--------------+------+-----+---------+----------------+
| ID           | int(11)      | NO   | PRI | NULL    | auto_increment |
| EMAIL_ID     | varchar(250) | YES  |     | NULL    |                |
| IP_ADDRESS   | varchar(255) | YES  |     | NULL    |                |
| CREATED_TIME | bigint(20)   | YES  |     | NULL    |                |
+--------------+--------------+------+-----+---------+----------------+
4 rows in set (0.00 sec)

このテーブルには数百万の行が含まれており、日ごとに徐々に増加します。

目標:

To getting past 12 month's user details from this table . 

最初に、12か月前に作成されたユーザーIDを取得します。私のクエリは次のようになります。

オプション1:

Select * from User where ID > `Account created before 12 months` .

オプション2:

Select * from User where CREATED_TIME > UNIX_TIMESTAMP(`2011-01-2011 00:00:00`)*1000;

これは詳細を取得するのに効率的です。そして、このクエリは監査目的で冗長に使用されます。

4

1 に答える 1

1

各行で関数を呼び出さないようにしてください。WHERE 句の最初の部分を次のように記述して、大幅に高速化できます (特に、CREATED_TIME フィールドのインデックスと組み合わせる場合)。

Accounts.CREATED_TIME
BETWEEN UNIX_TIMESTAMP(CURRENT_DATE() - INTERVAL 1 DAY) * 1000
AND UNIX_TIMESTAMP(CURRENT_DATE() - INTERVAL 1 DAY) * 1000 + 999

これにより、関数呼び出しが 1 回だけ行われ、CREATED_TIME フィールドのインデックスを使用してクエリを解決できることに注意してください。

于 2012-04-16T20:32:19.603 に答える