项目一部数据库开发规范
版本号 日期 修改者 说 明
2012-03-06
注:对如果有特殊需求必须书写较长的 SQL语句,应该把语句分解成若干部分,每一部分形成一个存储过程或函数。
大表尽可能使用分区
大表分区:超过 1G的表尽可能使用分区,分区的原则和尽可能和维护该表的机制结合起来。比如:保留 10 天数据,每天删除 10 天前的一天数据,在删除数据的时候,可以采用采用 alter table table_name truncate partition
partition_name, 而后 alter table table_name drop partition partition_name;
这里不直接使用 drop 的原因是减小数据库的开销。 Truncate 是在秒的级别中完成。
其他注意事项
在条件语句中,如 Where = 中将记录少的表放在等号的前部。表关联条件放在语句的最后部。
不使用容易与系统关键字重复的单词来命名,如ID , DATE等,但可以使用如
NODEID,BUYDATE等可以来命名;
SQL语句用大写字母(字段中的内容除外);
编写 ddl 和 dml 时,每个语句后面必须加上分号;
对于定期增加性的性能数据表,必须建立有效的索引;
查询语句的 Where语句必须落在索引上。
高效的 sql 语句
Sql 优化方法
RBO(rule-based optimizer)
CBO
驱动表
1)2 张行数不一致的表连接
表 TAB1行数: 16,384 行
表 TAB2行数: 1 行
SELECT COUNT(*) FROM TAB2, TAB1;
SELECT COUNT(*) FROM TAB1, TAB2; 2)3 张表连接
SELECT *
WHERE BETWEEN 1000 AND 2000
AND =
AND = ;
○SELECT *
FROM LOC L,
CAT C,
EMP E
WHERE BETWEEN 1000 AND 2000
AND =
AND = ;
Where语句顺序的效率
使用索引引起的 where 语句效率使用 AND语句时行数多的放在前面
SELECT *
FROM emp E
WHERE emp_sal > 50000
AND emp_type = 'MANAGER'
AND 25 < (SELECT COUNT(*) FROM EMP WHERE emp_mgr = ;
SELECT *
FROM emp E
WHERE 25 < (SELECT COUNT(*) FROM EMP WHERE emp_mgr =
AND emp_sal > 50000
AND emp_type = 'MANAGER';
使用 OR语句时,行数多的放在后面
SELECT * FROM emp E
WHERE 25 < (SELECT COUNT(*) FROM EMP WHERE emp_mgr = OR (emp_sal > 50000
AND emp_type = 'MANAGER');
SELECT * FROM emp E
WHERE (emp_sal > 50000
AND emp_type = 'MANAGER')
OR 25 < (SELECT COUNT(*) FROM EMP WHERE emp_mgr = ;
2) ROWID的使用
使用 ROWID的 WHERE语句效率最高。
SELECT ROWID, ...
INTO :emp_rowid, ...
FROM emp
WHERE = 56722
FOR UPDATE;
UPDATE emp
SET = ... ,
WHERE ROWID = :emp_rowid;
)减少访问次数
SELECT emp_name, sal, gra
数据库开发规范 来自淘豆网m.daumloan.com转载请标明出处.