wzy25的个人空间

暂无签名

  • 博客访问: 1067178
  • 博文数量: 1435
  • 用 户 组: 普通用户
  • 注册时间: 2008-10-30 13:47
个人简介

暂无介绍

ITPUB论坛APP

ITPUB论坛APP



APP发帖 享双倍积分

文章分类
文章存档

2010年(9)

2009年(7)

2008年(185)

2007年(454)

2006年(447)

2005年(329)

2004年(4)

我的朋友
微信关注

IT168企业级官微



微信号:IT168qiye



系统架构师大会



微信号:SACC2013

sql 开发常见问题 2010-04-06 16:46:44

分类: Oracle


常见问题如下:

[@more@]

1. 基本语法问题

1.1. 字段列表缺失

INSERT语句中不宜省略相关字段列表。

不正确:

insert t_issue_way values(1,'普通');

正确:

insert t_issue_way(issue_way,issue_name)
values(
1,'普通');

1.2. 算符两侧类型不一致

引起强制转换、无法应用索引,使访问效率低下。

假设:

t_dept.dept_code类型为varchar2

不正确:

select *
from t_dept
where dept_code=1

正确:

select *
from t_dept
where dept_code=
'1'

1.3. 访问列未使用原型

参与判断比较时,无法应用索引,使效率低下。

假设:

t_dapt.eff_date上建立了索引

不正确:

select *
from t_dept
where to_char(eff_date,'yyyy-mm')='2005-12'

正确:

select *
from t_dept
where eff_date>=to_date('2005-12-01','yyyy-mm-dd')
and eff_date2005-12-31','yyyy-mm-dd')+1

1.4. 时间区间理想化

部分时间未包含,使数据遗失。

不正确:

select *
from t_dept
where eff_date>=to_date('2005-12-01','yyyy-mm-dd')
and eff_date<=to_date('2005-12-31','yyyy-mm-dd')

正确:

select *
from t_dept
where eff_date>=to_date('2005-12-01','yyyy-mm-dd')
and eff_date2005-12-31','yyyy-mm-dd')+1

1.5. NOT IN

not in内的子查询,被多次重复执行,使效率低下。

不正确:

select organ_id
from t_company_organ a
where a.organ_id not in ( select organ_id
from t_dept
where organ_id=a.organ_id
)

正确

select a.organ_id
from t_company_organ a,t_dept b
where a.organ_id=b.organ_id(+)
and b.organ_id is null

2. 设计问题

2.1. TRIGGER

TRIGGER中使用DML语句更新数据表,当TRIGGER失效时,则更新语句未被执行,造成数据不一致。

2.2. 索引未正确设置

对记录数超过1万条以上表的访问,确保查询时使用了合适的索引。

通过索引取得的数据量应尽可能接近最终有效数据量。否则,索引须适当调整。

2.3. 大表访问

大表访问原则上要求一遍访问,多次使用。当存在多遍访问时,可设置中间表,一遍提取数据至中间表。

即使大表上建有相关索引,也应降低访问数。索引访问本身也需要大量的耗费。

2.4. 外键

请注意外键指向表中记录更新时的锁,必须要在外键上也建立索引。

阅读(7204) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~
评论热议
请登录后评论。

登录 注册