-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

请注意,这只会使函数调用一次,并且可以使用 CREATED_TIME 字段上的索引来解析查询。

于 2012-04-16T20:32:19.603 回答