前言
大数据量处理的存储过程执行时间非常长的时候,我们需要考虑对整个存储过程的sql脚本进行一次性能评估测试,主要是对处理大数据量的sql语句进行性能评估。有时候主观的对一个语句的性能评估需要熟悉sql语句的处理逻辑,也就需要对sql的深入了解和认识。一般情况下,测试人只熟悉简单的sql,那么对sql的性能评估也就无法从主观上去考虑,而且主观上的判断有时候还不一定正确。
针对主观无法评估sql的性能上,那我们就写一个比较简单的测试sql去测试处理速度,检查处理时间,在一定的程度上反馈相关sql的处理速度,尽可能让开发在相关处理语句上进行性能优化。
问题:
需求:从铃音平台(源数据A)同步100万的铃音资源到短搜系统(目标数据库B)中,数据库B中已经存在铃音资源,只是从在同步的铃音资源中更新铃音资源。在同步资源中,更新铃音资源步骤中,开发的做法是:
1、 将同步回来的铃音资源放在临时表1(#RingResource2)
2、 写查语句,从临时表(#RingResource2)筛选出短搜现有的铃音表(Resource_Ring)不存在的铃音。
3、 将筛选出来的铃音插入到短搜铃音表中(Resource_Ring)
步骤2中查询短搜现有的铃音表(Resource_Ring)不存在的铃音涉及到的数据非常大,Resource_Ring有26万的数据,#RingResource2有100万的数据。
针对这种查询,我比较两种写法(比较not in和not exists的查询速度),其中#RingResource存放的是短搜现有的铃音表(Resource_Ring)的数据
(1) SELECT * FROM #RingResource WHERE RingNo NOT IN (SELECT RingNo FROM #RingResource2)
(2) SELECT * FROM #RingResource WHERE NOT EXISTS (SELECT RingNo FROM #RingResource2