使用索引列与MySQL范围标准获取数据哪个最好?

时间:2012-04-16 20:25:25

标签: mysql

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;

这对于获取详细信息非常有效。此查询将被减少用于审计目的。

1 个答案:

答案 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字段上的索引可用于解析查询。