如题,工作中总结的一些,不全,日后继续补充。
一:尽量不要给oracle字段留有null值的机会 ,因为如果我们以某字段为null作为查询条件的话,引擎会放弃索引 从而进行全文检索 ,故 我们可以将该字段进行默认值设置, 没有Null ,比如只有0。
例:
select * from user where age is null; //这种写法非常错误的 会放弃索引设置默认值后的优化语句 select * from user where age = 0;
附://给info表的browsingnum字段设置默认值为0
alter table info modify browsingnum default(0);
二:在需要别人调取webService取数据的表中,尽量用版本号代替时间戳。
原因:时间戳固然精准,然是如果数据来源不统一,etl有慢有快,数据量大的话,比如用odi之类的etl工具的话,时间戳的时间差距还是很大的,虽然可以采取一些补偿机制,但是往往控制的不够精准。而版本号就没有这种问题,在别人调用接口取该表数据时,可以根据版本号取只最新更新的数据,这样是最高效的。
这里说一下今天做的接口的思路,事情是我们有一张表,组织机构表,需要做一个结构让别人取数据,事情其实很简单,但是思路需要清晰,需要想的大概四个方面:
(1)表怎么设计,就比如上面的版本号。
(2)需要对方传入什么参数,比如什么都不传代表将数据全量给对方,传一个整型数字0表示将最新版本号的数据给对方,传整型数字代表将相应版本号以及比该版本号大的数据给对方。
(3)是否需要对方验证身份,频繁的调用接口,如果出问题或者压力太大我们也要知道是谁弄得不是?所以可以需要对方传入一个身份标识,并记入日志。
(4)给对方返回什么格式的数据,json? xml? 建议返回json,没别的,就是我们拼接json方便,对方解析也方便。
三:适当选择字段类型
如varchar2和nvarchar2,varchar2和nvarchar2都是长度可变的类型,比如设置的是varchar2(4000),但是只存了1000长度的数据,没关系的,不会浪费空间,会自动按照数据长度分配空间。区别是nvarchar2在计算长度时会根据字符集的不同而分别计算,所以对汉字的兼容性好,但是varchar2更节省空间,比如一个gbk编的汉字,在nvarchar2中占两个长度,在varchar2只占一个长度,所以,如果数据是汉字以及其他特殊符号的话,为了兼容性,建议nvarchar2,否则,varchar2更适合。