你注意过你们开发所用的sqlserver数据库么?
生活中,很多人看来,每天的生活都是重复性的!其实,只要你留心观察,每天都有很多差别。
拿一个学生来说,每天早上骑车上学,好像都一样,可能今天你走的这天路,明天你走的那条路;
今天你骑车看见沿路的树叶落了,明天你看见下雪了 等等。。。。。
同样,对我们做软件开发的人来说,大多数人都要和数据库打交道,做web开发的就更不用提了。
上个月,出差去上海给客户实施,这里说的实施感觉和大多数人认为的不太一样,我们要到客户现场去
修改我们的程序,简直就是现场开发,而且首次实施基本都在1个月以上,不知道其他公司是否也是这样;
50%以上的时间都用于将用户的数据转换成系统需要的形势,倒入到我们的系统中,也就是我们自己的数
据库中,所以,了解我们所用的数据库及工具对提高我们的工作效率有事半功倍的作用。
比如,你向sqlServer中导入数据,有多种方法 :
1、如果只有1或2条数据,直接insert就OK了;
2、如果数据多一点,看看将要被倒入的数据放在什么中,若是存在另一个表中,写个
select * into Tab2 from Tab1 where ................. 就OK了
3、如果,数据是用户提供的excel文档(这个可能性最大),可以用sqlServer提供的Excel驱动程序,将数
据导入对应的表中,然后整理表后在导入真正的表中,尽量不要直接导入真正的表中(除非你有
每次都倒入前都备份数据库的嗜好,呵呵 开个玩笑!)。
记得,数据库默认的数据类型通常不是我们需要的,比如我们在excel中记录状态的1、2倒入后默认为double
类型,记得倒入的中间过程你可以修改对应列的数据类型、字段名称、表名称。
表名称 一般起 : a_TabName (原因:方便察看,区分)
还有个大家常遇到的情况,当你倒入多个表,而这些表又是1:1对应的,那么为了方便,你可以将这些表的标示
字段写成一样的,对你以后核对数据,倒入其他数据有太多的好处了。也许,只有你真正为此乐过你才会真的有
感触!
4、利用sqlServer提供的数据源倒入数据,也是非常不错的用法,好处主要是建立一次这样的关系,可以反复使用!!!
很多的SQL Server程序员没有掌握全部的T-SQL命令和SQL Server提供的
那些有用的工具。也许有人要问,我们需要全部掌握么?在这里,你的任务是了解,将来,当你设计一个查询时,你会记
起来:“对了,这里有一个命令可以完全实现我需要的功能”,剩下的就是谁便google或是sqlServer帮助。
不要使用SELECT *
很多程序员需要些和数据库打交道的代码,比如我们常用的持久层框架:expresso,spring等 都是用这些框架已封装好的东西
来访问数据库,除非你自己写jdbc(这通常不会被允许,他通常不能再不同平台或数据库上进行无修改的移植),写代码的时候没
必要连接数据库,就算是要测试通常也适用Junit来测试,也许感觉不到 select co1,co2,co3 form TabName ...
对性能的差距,因为通常开发阶段,数据库中的代码量通常很小(个人感觉,公司机器差,太慢! 一根稻草!)
如果你的数据库中有100000条以上的记录,你直接在查询分析器中查,看看你的自己的感觉!我想人脑足以分析出快和慢!
小心死锁
按照一定的次序来访问你的表。如果你先锁住表A,再锁住表B,那么在所有的存储过程中都要按照这个顺序来锁定它们。
如果你(不经意的)某个存储过程中先锁定表B,再锁定表A,这可能就会导致一个死锁。如果锁定顺序没有被预先详细的设好,
死锁是不太容易被发现的。
那我们公司的 慧鼎--人力资源管理系统 来说,开发的时候主要是针对oracle(因为我们的产品定位就是针对中高端企业应用),
当然也可以用在其他数据库上(sqlServer,DB2,openbase),测试过一部分。用户通常会自己选择数据库,我那次实施的用户就是选用sqlServer,结果系统多处出现了死锁,有些公用的方法很难改,关联太多,现在想想累死我了,哈哈!
我们在java中通常用处理方式:先建立缓冲池--建立连接--设置不自动提交--查询||更改||删除--提交代码(如果未出异常)。
注意超时问题
查询数据库时,一般数据库的缺省都比较小,比如15秒或者30秒。而有些查询运行时间要比这长,特别是当数据库的数据量不断变大时。
避免将列设为NULLable
如果可能的话,你应该避免将列设为NULLable。系统会为NULLable列的每一行分配一个额外的字节,查询时会带来更多的系统开销。
另外,将列设为NULLable使编码变得复杂,因为每一次访问这些列时都必须先进行检查。
我并不是说NULLS是麻烦的根源,尽管有些人这样认为。我认为如果你的业务规则中允许“空数据”,那么,将列设为NULLable有时
会发挥很好的作用,但是,如果在类似下面的情况中使用NULLable,那简直就是自讨苦吃。
CustomerName1 / CustomerAddress1 / CustomerEmail1 / CustomerName2 / CustomerAddress2 / CustomerEmail2
如果出现这种情况,你需要规范化你的表了。