不学无术的我,又来记录下只言片语,知识不够,一直只能搬砖。
这次就遇到有点棘手的砖了,是一个报表,设计5、6个表左右。这次因实现需求,百度到的知识点如下,纯CV稍微修改,毫无理论支撑,阅读请谨慎,莫要被我误导:
update tableA set column1=t.val from ( select s.key,s.val from ( values(1,2),(2,3),(3,4) ) s (key,val) ) t where tableA.column2=t.key ----------------------------------------- update tableA set column1=t.val from ( select case when c.mode=1 then b.num*100-335 else (b.num-200*1.2) end as val, b.key from tableB b inner join tableC c on b.cid=c.id ) t where tableA.column2=t.key
以上两个都是批量更新的语句,第一个是更新来源非表格中的数据,第二个是更新来源是表格中的数据。都是根据每行记录的情况来更新不同的值,不像以前的基础更新语句
update tableA set column1=2 where key='a';
然后就是下一个,正常人都会的索引,献丑了。
在我写的混乱的sql中,出现一处子查询连表,是用字符串匹配的,两边才各1万条数据,却耗时10秒,看了下,逻辑扫描百万次。
我只能将两边的子查询都提前,插入临时表,给两个临时表都加上关联字段的索引,逻辑扫描剩两万次了。
大家千万不要学我这样不学无术,工作多年,得过且过,原地踏步。要不断学习充实自我,不然像我这样,写个小数据的连表sql都能这么慢,真是笑死人了。