我正在执行以下查询以从我的表中获取每日用户登录详细信息。我发布了示例表和我正在执行的查询。
问题
我的查询没有执行,因为range
它检查了整个表。它对我来说变得很慢。如果我索引时间戳列是没有用的,因为以毫秒为单位的时间戳没有重大差异。我无法为表的时间戳列建立索引,因为我的产品在生产设置中。它将包含数百万行。如何将此查询作为range
一个或任何更好的解决方案执行?
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