1
liprais 2014-11-22 09:48:36 +08:00 via iPhone 1
先看执行计划再谈优化
|
2
a2z 2014-11-22 09:59:40 +08:00 1
先说几个优化的地方,既然a表中sessionid不会重复,就用sessionid作为主键。
a表status加索引,格式tinyint(1)或者enum(1,2) a表sendtime加索引 a表failreason加索引 b表sessionid加索引 |
3
a2z 2014-11-22 10:01:28 +08:00
(t.fail_reason = '' or t.fail_reason is null)
空值统一用''或者null,要么'' 要么null,这样也能少一个判断快一点 |
6
caixiexin OP @a2z 非常感谢!因为这个些表使用有段时间了,而且其他程序也在用,所以不方便改查表为查view
关于索引的话,经常会被修改的字段是不是不适合加索引?a表的status和sendtime由于用户可能会重播,所以取值经常改动= = |
7
laoyuan 2014-11-22 11:57:05 +08:00 1
两个表 sessionid 都做索引, a表 unique,b表 index。建一个中间表t3 俩字段, 主键 sessionid,还有reason
TRUNCATE TABLE t3; INSERT INTO t3 (SELECT sessionid, reason FROM (SELECT sessionid,reason FROM t2 ORDER BY create_time DESC) as t22 GROUP BY sessionid); UPDATE t,t3 SET ... WHERE ... 这点数据量秒秒钟的事。 |
9
MonkeyDLuffy 2016-06-06 09:57:28 +08:00
@laoyuan 方法非常好用 为啥这样速度能提高这么多 求指点
|
10
laoyuan 2016-06-06 10:57:49 +08:00
@MonkeyDLuffy 和 LZ 写的完全是两个思路,主要是因为 LZ 没有掌握这一技能: GROUP BY 的时候如何选中某一项最大或最小的那条记录
|