[SQL]数据库开发总结

九 17th, 2011

      我们在进行网站的开发过程中,其必要的过程就是对一些sql语句的优化,如果sql写得太烂,在冒个触发点很有可能造成服务器宕机,造成不必要的损失。所以,总结了一下数据库开发的一点经验(主要是针对的数据库为ORACLE)。

1.数据类型(Data Type):

  • Oracle中的数据类型,常见的有:number,date,timestamp,varchar2,char,clob….
  • TIMESTAMP一般不推荐使用,只有需要更高精度的时间才会使用,一般情况下,我们只需要DATE类型即可,该类型精度到秒。
  • CHAR,定长字符串, 我们一般只使用CHAR(1), 作为bool值的类型。对于一般字符串,我们推荐使用VARCHAR(最长有4000字节).
  • CLOB字段,建议是不要使用,而是用多个VARCHAR(4000)代替,因为当CLOB字段更新时,空间不重用。如果一定要使用,在超过4000字节的时使用,CLOB字段必须拆分到一张独立的表中,用主键和主表进行关联。

2.常用的类型转换:

  • data->varchar: to_char(sysdate,’yyyy/mm/dd hh24:mi:ss’)
  • varchar->date: to-date(‘2010/06/10 15:30:00′,’yyyy/mm/dd hh24:mi:ss’)
  • varchar->number:to_number(‘2001’)
  • number->varchar:to_char(2001)

3.表的设计规范:

  • 我们建表的时候,主键一定要无意义,由序列或者主键生成器产生,最好不要使用组合字段.
  • 禁止使用复杂的数据结构,如数组或自定义类型.

4.SQL开发规范:

4.1  使用绑定变量:

      PL/SQL中有绑定变量 “#var_name#”和替代变量$var_name$” ,但我们在使用的时候总是选择绑定变量. 这个完全是处于安全的考虑,和性能没有关系.

4.2  需要避免的事情:

       避免在where子句中对索引字段施加函数,这样将导致索引失效

a:select id, name from user where to_char(create_time,’yyyymmdd’)=’20070101’;

b:select id, name from user where create_time=to_date(‘2007-01-01’,’yyyy-mm-dd’);

像上面的2个语句,a语句是典型的错误写法,导致索引失效, 而语句b才是正确的写法.     

4.3  Null的使用一定要注意:

  • NULL表示不确定, 而不是空。
  • 查询时,使用is null戒者is not null。
  • 更新时,使用等于号 = null。
  • 任何值(包括null值)与null值进行比较时,结果均为false。
  • 用于排序的字段,如果有null值,请注意处理null值的顺序,oracle中可以使用nulls first或nulls last关键字。

4.4  尽量不要使用select *

  • 表连接时,不允许使用select *。
  • 单表查询时, 表中有clob字段或者包含长度较大的字段时, 禁止使用select * . 其它情况下可以使用。  

4.5   聚合函数

  • 计数使用count(*),而不是count(1)戒count(pk)。
  • count(column_name)计算该列不为NULL的记录条数。
  • count(distinct column_name)计算该列不为NULL的不重复值数量。
  • count()函数不会返回NULL,但sum()函数可能返回NULL,可以使用nvl(sum(),0)来避免返回NULL。

      上面的内容是最近总结的,以后还会对该博文进行补充,而且平时也得多注意积累这方面的素材。同时希望大家都可以分享自己在数据库开发中的经验。

(全文完–)





除非注明,本站文章均为原创。本文基于 BY-NC-SA 协议进行授权,欢迎转载,演绎或用于商业目的,但是必须保留本文的署名 metaboy(包含链接).

本文链接地址: http://blog.wangyuxiong.com/archives/51282

订阅本站:http://www.wangyuxiong.com/feed

分类: 思考讨论         标签: , ,
目前还没有任何评论.

无觅相关文章插件,快速提升流量