2
감사 용 테이블이 있습니다. 현재 로그인 한 사용자가 없기 때문에이 쿼리를 사용했습니다. 그러나이 쿼리는 지난 며칠 동안 오랜 시간이 걸립니다. 느린 쿼리 로그에서 분석 한 결과 행 수가 너무 많습니다. 그 날의 테이블에검사 된 행 수는 표의 행 수보다 얼마나됩니까?
총 행 6032194
(
select 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
)입니다.
쿼리
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
# [email protected]: 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 | |
+-----------------------+--------------+------+-----+---------+-------+
명확히하기 위해 IAMAccountAudit_CTndx 키는 created_time 필드의 인덱스입니다. 맞습니까? 또한 현재 로그인 한 사용자의 수를 찾고 있지만 쿼리가 "('s', 'g', ' y ','fb ') " –
쿼리를 시도 할 샘플 데이터를 생성하려면 create table 및 insert 문을 게시하는 것이 도움이 될 수 있습니다. (분명히 전체 테이블은 아니지만 몇 줄이 있으므로 구조를보고 실제 데이터에 대한 쿼리를 시도 할 수 있습니다.) –
세 가지 다른 문을 제시하고 왜 검사/반환 된 행 수가 다른지 묻습니다. – rabudde