一、前言
最近做的一个项目里有一个数据查询页面,该页面一天的数据量大概在300-500万。但是这个页面的响应速度是真的慢!好的时候三四秒,一般情况都在十秒上下,检查了SQL也没发现什么大问题。通过PL/SQL里的debug,发现了问题的原因,就是在计算查询总条数的时候出现的问题,这一步占据了大量的时间。但是我也很纳闷,一个select count(*) from a这样一句简单的查询语句有什么问题呢,根据查询资料,做了如下改动
- 将*号改为具体字段名,最好是有索引的字段。
- 在语句中加入了/*+parallel(t,8)*/
修改之后,测试发现速度显著提升,大概在1.5s左右。
二、/*+parallel(t,8)*/
/* 在Oracle中是hint,/*+parallel(t,8)*/意思是强行启用并行模式来执行当前SQL,按理是数字越大,执行效率越高。一般为CPU的倍数如:4,8等,在执行类型SQL必须先运行:alter session enable parallel dml 。
基于并行查询要启动并行进程、分配任务与系统资源、合并结果集,这些都是比较消耗资源,
但我们为能够减少执行事务的时间使用parallel HINT还是值得的,尤其在ODS系统中报表统计等方面更有使用意义.
一般而言主要在如下情况使用parallel HINT
1.表的数据量很大,超过一千万;
2.数据库主机是多个CPU;
3.系统的当前负载较低;
三、参考
列举相关参考网页:
https://www.cnblogs.com/alisonzhu/p/4090986.html
http://blog.sina.com.cn/s/blog_e1eae3680102wnvk.html