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;
这对于获取详细信息非常有效。此查询将被减少用于审计目的。
答案 0 :(得分: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字段上的索引可用于解析查询。