数据库操作应注意的一些细节

            1、对于一些较复杂的查询,使用临时表会提高查询效率,大量数据查询效果更明显。

    2、禁止直接使用select * from Table1而不加限制。特别是通过远程连接现场数据库时需要特别注意。当数据库里的数据量巨大时这样会对网络传输及数据库造成很大的压力。应该使用 select top 100 * from Table1(oracle用rownum、mysql用limit限制)的方式查询,也可以在查询前执行 set rowcount 100操作,执行完成后用set rowcount 0 复原。如果是oracle则使用where rownum<=100来控制。其中n(top n)的大小限制在数量范围内(5000(局域网)、500(远程网))。

    3、多表关联查询时禁止在where 部分不加条件直接查询。这样相当做了一个笛卡尔积。如果两个表的记录都超过一万,则查询的结果将超过1亿。

    4、在代码里编写SQL语句,在进行多表关连查询时,表的后面必须加上别名;在字段名前也需要加上别名。

    5、不要在in 条件下放过多的条件(in 里是子查询除外),这样有可能使查询失败,例如Sybase里in的条件不能超过300个。其他的数据库具体数目不清楚,不过在编写代码的时候必须要留意是否会有这样的情况出现。可以先把条件插到临时表。

    6、禁止查询过程中非法断开网络链接,或在执行一个大查询的过程中非正常关闭程序。这样导致数据库在后台继续执行查出,数据库链接不释放, 特别是在远程链接的时候。 遇到以上情况发生时,应该重新登录数据,把自己的进程kill掉。注意:在做kill 的时候必须小心,防止kill别人的进程。先使用sp_who查看, 再kill进程。

    7、进行数据库表删除前,必须先进行select 操作确认需要删除的数据。特别是对生产环境的数据库操作时必须谨记。

    8、删除数据前需要先了解删除数据量的大小,如果删除的数据有几十万,这时不能使用单条的SQL全部删除,应该分批量删除,例如每次删除1 万(删除前执行set rowcount 10000),并且在删除的过程中需要sleep,让数据库能够腾出资源给其他的服务使用。

    9、做sum,avg操作时注意越限的问题,可以用convert将类型转换成numeric(10,0)等更大的数据类型。除运算的时候注意分母为0的情况。

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值