1:SqL 优化
1:尽量避免使用 select * 查询方式
2:减小访问数据库的次数
因为每执行一条sql语句的时候,oracle内部会做许多的事情 如:解析sql ,估算索引的利用效率,绑定变量,读数据块等。因此减小了访问数据库的次
数实际就是减小了oracle的工作量
3:用where前条件查询来代替having后条件查询
因为使用having后条件查询的话,会检索出所以记录之后,才对结果集进行过滤 而使用where前条件查询的话 它首先会通过条件限制了记录的数目,这样减小了开销
4:尽量使用exists代替in 用 not exists 代替 not in
因为在相关子查询中 我们使用 in
如 查询一条in(1,2,3,1);它会对这里面的数据进行排序
如下面的sql语句:
select * from emp where deptno in (select deptno from dept where
dnmae="jong")
select * from emp where exists(select 1 from dept where emp.deptno
=deptno and dname = 'jong')
5:用Exists代替distinct
因为在相关子查询中distinct 把结果集查出来,内部,还会查找 重复的结果集
6:应该用union代替or
select * from emp where empid = 'df' or empid =
'1002'
而union会将两个结果集进行合并
8:用rowid来删除重复记录数
所用的字段都是相同的,只有rowid不是重复的,所以要删除重复记录时,我们 充分利用rowid来删除重复记录
9:使用DECODE函数来减少处理时间
使用DECODE函数来减少处理时间
使用DECODE函数可以避免重复扫描相同记录或重复连接相同的表.
10:用TRUNCATE替代DELETE来删除数据
11:使用表的别名
12:尽量多使用COMMIT
13:用>=替代>
14:sql语句大写,因为oracle解析sql语句的时候,会将小写转化成大写
15:表的驱动方式也会关系的 sql优化 不同的驱动方式,结果不一样
16:用索引来提高效率
因为索引就相当于书的目录 如果我们看一本书,如果我们要查找相关联的内容,我们就可以通过书的目录快速的定位到多少页来查看书的内容
当然我们在使用索引时要注意以下问题:
a:不能在索引列上使用远算:包括算术远算,逻辑远算 这样是相当的消耗性能的
b:避免在索引列上使用NOT:
通常,我们要避免在索引列上使用NOT,NOT会产生在和在索引列上使用函数相同的影响。当ORACLE遇到NOT,他就会停止使用索引转而执行全表扫描。
2:根据项目中的业务讲一下你使用的存储过程
例如前台界面是“结算操作”业务,根据输入了的结算时间段和结算单位,购买额数,以及相关的控制参数 把这些参数传给后台存储过程,后台存储过程里面可以编制相关的结算处理程序,根据输入的单位、时间、份额等参数,来进行集中处理,这个过程是不需要与前台进行交互的,这里可以处理很复杂的业务,例如结算操作会涉及到多个表如单位基本信息表、单位结算信息表、明细表等等,这个是在存储过程里面集中实现处理,然后把结果返回给前台,前台根据处理结果是否成功,决定是否进行提交(COMMIT)操作。
3:oracle自动增长如何实现
包括:最小值,初始值,步长,和最大值
如果选择的是
实体与实体之间的关系,比如说一个班级有多个学生呀
当然在设计的过程中一定要满足数据库3大范式
8:oracle 分页?
SELECT * FROM
SELECT A.*, ROWNUM RN
WHERE ROWNUM <= 40
)
WHERE RN >= 21
其中最内层的查询SELECT * FROM TABLE_NAME表示不进行翻页的原始查询语句。ROWNUM <= 40和RN >= 21控制分页查询的每页的范围。
上面给出的这个分页查询语句,在大多数情况拥有较高的效率。分页的目的就是控制输出结果集大小,将结果尽快的返回。在上面的分页查询语句中,这种考虑主要体现在WHERE ROWNUM <= 40这句上。
选择第21到40条记录存在两种方法,一种是上面例子中展示的在查询的第二层通过ROWNUM <= 40来控制最大值,在查询的最外层控制最小值。而另一种方式是去掉查询第二层的WHERE ROWNUM <= 40语句,在查询的最外层控制分页的最小值和最大值。这是,查询语句如下:
SELECT * FROM
(
SELECT A.*, ROWNUM RN
FROM (SELECT * FROM TABLE_NAME) A
)
WHERE RN BETWEEN 21 AND 40
9:oracle rowid
rownum是行数,ROWID是物理编号 |
通过唯一rowid实现删除重复记录.在Oracle中,每一条记录都有一个rowid,rowid在整个数据库中是唯一的
10:oracle 的内置函数?
1:oracle 提供一些内置函数 用于sql的结构化查询 语句
分组函数:
完整的Oracle数据库通常由两部分组成:实例和数据库。
等);