Mysql 检查的行数如何大于表中的行数?
我有一张审计桌。我使用此查询获取当前登录的用户数。但是,在过去的几天里,这个查询需要很长时间。在“从慢速查询日志分析”上,检查的行数太长 当天表上的行总数为Mysql 检查的行数如何大于表中的行数?,mysql,Mysql,我有一张审计桌。我使用此查询获取当前登录的用户数。但是,在过去的几天里,这个查询需要很长时间。在“从慢速查询日志分析”上,检查的行数太长 当天表上的行总数为6032194( ) 查询 select count(user_id) from audit where audit.created_time between UNIX_TIMESTAMP(CURRENT_DATE() - INTERVAL 3 DAY) * 1000 AND UNIX_TIMESTAMP(CURRENT_D
6032194
(
)
查询
select count(user_id) from audit where audit.created_time
between UNIX_TIMESTAMP(CURRENT_DATE() - INTERVAL 3 DAY) * 1000 AND
UNIX_TIMESTAMP(CURRENT_DATE()-INTERVAL 2 day) * 1000
and operation in ('s','g','y','fb');
解释输出
id: 1
select_type: SIMPLE
table: audit
type: range
possible_keys: IAMAccountAudit_CTndx
key: IAMAccountAudit_CTndx
key_len: 9
ref: NULL
rows: 16434866
Extra: Using where
它正在作为范围查询执行。但它检查86158436
行
慢速查询日志:
# Time: 130216 1:09:21
# User@Host: root[root] @ [bharathik]
# Query_time: 1853.751416 Lock_time: 0.000101 Rows_sent: 1 Rows_examined: 86158436
SET timestamp=1361005761;
SELECT UNIX_TIMESTAMP(CURRENT_DATE() - INTERVAL 1 DAY) * 1000, 'SIGNIN', 0, count(distinct(zuid)) as SIGN_IN_COUNT from audit where audit.CREATED_TIME BETWEEN
UNIX_TIMESTAMP(CURRENT_DATE() - INTERVAL 3 DAY) * 1000 AND
UNIX_TIMESTAMP(CURRENT_DATE()-INTERVAL 2 day) * 1000
创建表格
+-----------------------+--------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+-----------------------+--------------+------+-----+---------+-------+
| auto_id | bigint(19) | NO | PRI | 0 | |
| user_id | varchar(100) | YES | MUL | NULL | |
| service | varchar(100) | YES | | NULL | |
| name | varchar(100) | YES | | NULL | |
| operation | varchar(15) | YES | | NULL | |
| ipaddress | varchar(50) | YES | | NULL | |
| referrer | varchar(250) | YES | | NULL | |
| user_agent | varchar(250) | YES | | NULL | |
| created_time | bigint(19) | YES | MUL | NULL | |
+-----------------------+--------------+------+-----+---------+-------+
由于第二个SQL查询具有IN子句,因此需要计算其他“行”。这些额外的“行”表示IN子句的临时结果。只是澄清一下,键IAMCountAudit\u CTndx是已创建时间字段上的索引,对吗?另外,您说您正在查找当前登录的用户数,但您的查询似乎在计算一天中与“operation in('s'、'g'、'y'、'fb')”匹配的行总数。发布create table和insert语句以生成一些示例数据以尝试查询可能会有所帮助。(显然不是整张表,而是几行,这样我们可以看到结构并尝试查询实际数据。)你给出三种不同的陈述,并问为什么检查/返回的行数不同?@Nathan,我添加了我的表详细信息。
+-----------------------+--------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+-----------------------+--------------+------+-----+---------+-------+
| auto_id | bigint(19) | NO | PRI | 0 | |
| user_id | varchar(100) | YES | MUL | NULL | |
| service | varchar(100) | YES | | NULL | |
| name | varchar(100) | YES | | NULL | |
| operation | varchar(15) | YES | | NULL | |
| ipaddress | varchar(50) | YES | | NULL | |
| referrer | varchar(250) | YES | | NULL | |
| user_agent | varchar(250) | YES | | NULL | |
| created_time | bigint(19) | YES | MUL | NULL | |
+-----------------------+--------------+------+-----+---------+-------+