第一条语句
检查慢查询日志发现
一个sql查询有时候快 有时候慢
select count(distinct(ul.userId)) number, CASE WHEN ul.lastaccess>curdate() THEN 1 WHEN (ul.lastaccess>subdate(curdate(),1)
and ul.lastaccess <curdate()) THEN 2 WHEN (ul.lastaccess>date_Sub(curdate(), INTERVAL DAYOFMONTH(curdate())-1 day)) THEN 3
WHEN (ul.lastaccess>date_sub(date_Sub(curdate(), INTERVAL DAYOFMONTH(curdate())-1 day),INTERVAL 1 month)
and ul.lastaccess <DATE_SUB(sysdate(),INTERVAL 1 month)) THEN 4 ELSE 5 END as dateInterval from SessionLog ul group by dateInterval; 执行发现有 copy tmp table on disk.... 有时候这个查询要花155s(经常发生 容易发生柱塞),有时候6-7s。
我准备加force INDEX (idx_USL_lastaccess)。 但是发现执行计划没有走这个索引。
慢查询日志每天都有这个sql 随着时间的加上,过了半年,发现这个语句随着表记录增加,速度开始变慢。 主要原因 SessionLog 有500万记录。 (要申明,SessionLog 这个表在不停插入数据)
这个sql如何优化 , 做个视图(定时刷新) 存储过程 ?
检查慢查询日志发现
一个sql查询有时候快 有时候慢
select count(distinct(ul.userId)) number, CASE WHEN ul.lastaccess>curdate() THEN 1 WHEN (ul.lastaccess>subdate(curdate(),1)
and ul.lastaccess <curdate()) THEN 2 WHEN (ul.lastaccess>date_Sub(curdate(), INTERVAL DAYOFMONTH(curdate())-1 day)) THEN 3
WHEN (ul.lastaccess>date_sub(date_Sub(curdate(), INTERVAL DAYOFMONTH(curdate())-1 day),INTERVAL 1 month)
and ul.lastaccess <DATE_SUB(sysdate(),INTERVAL 1 month)) THEN 4 ELSE 5 END as dateInterval from SessionLog ul group by dateInterval; 执行发现有 copy tmp table on disk.... 有时候这个查询要花155s(经常发生 容易发生柱塞),有时候6-7s。
我准备加force INDEX (idx_USL_lastaccess)。 但是发现执行计划没有走这个索引。
慢查询日志每天都有这个sql 随着时间的加上,过了半年,发现这个语句随着表记录增加,速度开始变慢。 主要原因 SessionLog 有500万记录。 (要申明,SessionLog 这个表在不停插入数据)
这个sql如何优化 , 做个视图(定时刷新) 存储过程 ?
"
---这个是最实际可行的, 可以加入一个字段
CASE WHEN ul.lastaccess>curdate() THEN 1
这个curdate 是当前日期