随笔分类 - SQL Server
摘要:一、SQL拼写建议1、查询时不返回不需要的行、列 业务代码要根据实际情况尽量减少对表的访问行数,最小化结果集,在查询时,不要过多地使用通配符如:select * from table1语句,要用到几列就选择几列,如:select col1,col2 from table1;在可能的情况下尽量限制结果集行数如:select top 100 col1,col2,col3 from talbe2,因为某...
阅读全文
摘要:1、参数化sql 对于一般简单查询,数据库能自动参数啊以重用计划缓存,如:SELECT * FROM table WHERE id=1;SELECT * FROM table WHERE id=4 在sqlserver内部能自动参数化这个查询,SELECT * FROM table WHERE id=@1 但是一旦sql语句中带有join、union、top……等关键字...
阅读全文
摘要:死锁原因: 死锁是由两个相互阻塞的线程组成,它们互相等待对方完成,一般死锁情况下两个数据库事务之间存在着相反的操作。sqlserver中死锁监视器定时检查死锁,如果发现死锁,将选择其中回滚消耗最小的任务,这时候发生1025数据库错误。可以通过启用sqlserver2005快照模式,避免一些读/写的逆向阻塞造成的死锁.但是对于一些写/写阻塞的死锁可能无法解决,很多时候需要从业务的角度来避免一些写/写...
阅读全文
摘要:阻塞原因 在默认事务隔离情况下,数据库事务越长,一方面独占锁被持有的时间越长,写操作阻塞读操作的机会就越多;另一方面,在默认的读提交隔离模式下,读操作使用共享锁与独占锁不兼容,读操作也会阻塞写操作。 阻塞也是死锁产生的基本条件,改善了阻塞就能有效减少死锁。 在软件开发后期,在对大数据量的集成测试工程中,通过活动查看器可以观察到阻塞情况,主要产生阻塞的原因就是读和写相互阻塞在对同一个大表的操作上。因...
阅读全文
摘要:无主键、索引或者没有查询索引无效,是产品查询慢的最常见问题,以下是数据库表主键和索引设计的主要原则1、主键主键ID,主键既是约束也是索引,同时也用于对象缓存的键值。2、索引 *组合或者引用关系的子表(数据量较大的时候),需要在关联主表的列上建立非聚集索引(如订单明细表中的产品ID字段、订单明细表中关联的订单ID字段) *索引键的大小不能超过900个字节,当列表的大小超过900个字节或者若干列的和超过900个字节时,数据库将报错。 *表中如果建有大量索引将会影响INSERT、UPDATE和DELETE语句的性能,因为在表中的数据更改时,所有的索引都将必须进行适当的调整。需要避免对经常更新的表进.
阅读全文
摘要:树表设计: 树状表都是使用ID和IDParent两个字段来表示树关系。对树进行查找只能使用自关联方式,不光写法麻烦而且记录多的时候查询性能会非常差。建议在设计树表的时候可以考虑加入treePath字段,记载到该节点记录需要经历的树路径。虽然会增加Insert和Update的成本。但是对查询树关系非常有帮助。可以避免大部分的自关联查询。分区表: 记录超过一百万的表要考虑是否需要使用分区表。对于能够明...
阅读全文
摘要:一、数据库性能1、表设计2、主键、索引设计3、阻塞4、死锁5、SQL查询性能优化(一)6、SQL查询性能优化(二)二、C#语言1、垃圾回收2、String操作3、多线程4、类型系统5、异常处理6、反射7、基本代码技巧三、ADO.NET1、应用ADO.NET的一些思考原则2、Connection3、Command4、DataReader5、DataSet四、Asp.net1、减少往返进程2、避免阻塞...
阅读全文