您的位置:首页 > 职场人生

SQL数据库优化高度总结,只为概括复习,不负责深入浅出,面试专用!

2016-03-09 09:47 771 查看

一.确保数据查询使用索引

1.在首字确定情况下,like尽量避免使用首字百分号,%号放后面是会使用索引的

2.<>不等于表达式不走索引,尽量使用大于小于代替

3.不要使用IN,用exists代替

4.OR不走索引,尽量用UNION代替

5.联合索引顺序有讲究,只有按顺序索引才生效

6.索引列一定不能存在null值,否则索引失效

二、SQL解析优化

1.SQL解析FROM是从右到左,如果是多表关联,把最简单的表写在最右边。

2.SQL解析条件是从下到上,所以表之间关联一定要写在其他表的条件之前。

3.SELECT中避免使用*,*需要耗费解析器工作.

4.使用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%’;

 你可以用DECODE函数高效地得到相同结果

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%’;

5.使用ROWID进行高效操作

例如:删除重复的数据

DELETE FROM EMP E WHERE E.ROWID > (SELECT MIN(X.ROWID)

FROM EMP X WHERE X.EMP_NO = E.EMP_NO);

6.删除全表数据时,使用DDL'TRUNCATE'代替Delete

7.事务要及时提交,一般表建议在2w左右的数据进行提交

8.一对多关联时,如果结果集是小的数据,尽量使用EXISTS

SELECT DISTINCT DEPT_NO,DEPT_NAME FROM DEPT D , EMP E

WHERE D.DEPT_NO = E.DEPT_NO

(高效):

SELECT DEPT_NO,DEPT_NAME FROM DEPT D WHERE EXISTS ( SELECT ‘X’

FROM EMP E WHERE E.DEPT_NO = D.DEPT_NO);

10. 尽量使用union all代替union
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: