如何减少对数据库的访问次数来加快sql执行
来源:互联网 发布:淘宝旺旺怎么找人 编辑:程序博客网 时间:2024/04/20 00:01
=====================
1、合理使用DECODE函数
例:
SELECT COUNT(*),SUM(SAL) FROM EMP
WHERE DEPT_NO = 0020
AND ENAME LIKE ‘SMITH%';
SELECT COUNT(*),SUM(SAL) FROM EMP
WHERE DEPT_NO = 0030
AND ENAME LIKE ‘SMITH%';
这两个查询可以写成
SELECT COUNT(DECODE(DEPT_NO,0020,'X',NULL)) D0020_COUNT,
COUNT(DECODE(DEPT_NO,0030,'X',NULL)) D0030_COUNT,
SUM(DECODE(DEPT_NO,0020,SAL,NULL)) D0020_SAL,
SUM(DECODE(DEPT_NO,0030,SAL,NULL)) D0030_SAL
FROM EMP WHERE ENAME LIKE ‘SMITH%';
用类似的方法也可以重新写GROUP BY 和ORDER BY子句。
----------------------
2、整合简单的查询
SELECT NAME FROM EMP WHERE EMP_NO = 1234;
SELECT NAME FROM DPT WHERE DPT_NO = 10 ;
SELECT NAME FROM CAT WHERE CAT_TYPE = ‘RD';
这三个查询可以写成:
SELECT E.NAME , D.NAME , C.NAME FROM CAT C , DPT D , EMP E,DUAL X
WHERE NVL(‘X',X.DUMMY) = NVL(‘X',E.ROWID(+))
AND NVL(‘X',X.DUMMY) = NVL(‘X',D.ROWID(+))
AND NVL(‘X',X.DUMMY) = NVL(‘X',C.ROWID(+))
AND E.EMP_NO(+) = 1234
AND D.DEPT_NO(+) = 10
AND C.CAT_TYPE(+) = ‘RD';
<理论如此,打死我也不会这么做~~~~~>
低效:
UPDATE EMP
SET EMP_CAT = (SELECT MAX(CATEGORY) FROM EMP_CATEGORIES),
SAL_RANGE = (SELECT MAX(SAL_RANGE) FROM EMP_CATEGORIES)
WHERE EMP_DEPT = 0020;
高效:
UPDATE EMP
SET (EMP_CAT, SAL_RANGE) = (
SELECT MAX(CATEGORY) , MAX(SAL_RANGE)
FROM EMP_CATEGORIES)
WHERE EMP_DEPT = 0020;
--------------------------------
3、使用truncate代替delete
当删除表中记录时,要是回滚段来记录已经被删除的数据的信息,记录大量日志,用来做恢复使用
这样在操作的时候,对数据库来说是个不小的消耗
相反truncate是ddl,直接收回表所使用的空间,不记录日志,速度快,而且可以回收空间
----------------------------------
4、合理使用commit
commit后可以释放资源
a、释放回滚段上用于恢复数据的信息
b、释放锁
c、释放redo log buffer中的空间
d、为管理上述资源花费的内部消耗
但使用commit也要注意事务的完整性,而且过于频繁的commit也会带来性能的开销
- 如何减少对数据库的访问次数来加快sql执行
- 将数据取到内存,减少对数据库的访问次数,加快速度
- 如何减少对Mysql的访问以优化SQL语句
- Oracle 减少数据库访问次数
- asp加快对数据库的访问
- asp中加快对数据库的访问
- 如何减少访问磁盘的次数,减少访问磁盘的次数
- 数据库性能优化-4-减少对数据库的连接次数
- 如何加快sql执行速度?
- 如何加快sql执行速度?
- 如何使用浏览器缓存来加快站点的访问速度
- 如何减少对数据库的访问——多个页面共用数据集
- 去哪网实习总结:如何有效减少对数据库的访问(JavaWeb)
- 【系统性能优化】减少页面对公共资源Easyui的访问次数
- 数据库性能提升之减少访问数据库次数
- 数据库提升性能 要减少访问数据库次数
- 数据库性能提升之减少访问数据库次数
- memache减少数据库的更新次数
- SQL学习笔记之游标
- C语言指针与数组之间的恩恩怨怨
- Javascript Math ceil()、floor()、round()三个函数的区别
- C语言函数指针
- 点阵图像的显示小处理
- 如何减少对数据库的访问次数来加快sql执行
- C语言数组参数与指针参数
- 蝴蝶兰与鳞托菊
- UML和类图关系
- C语言数组应用
- 类的前向声明,class和include的区别
- C语言指针
- ORA-28000: the account is locked-的解决办法
- 数据库性能提升之减少访问数据库次数