------------恢复内容开始------------
1.对查询进行优化,应尽量避免全表扫描,首先应考虑在where及order by 涉及的列上加索引。
create nonclustered index ix_test on test(id) include(test1,test2)
2.应尽量避免在where子句中对字段进行null值的判断,否则将导致引擎放弃索引而进行全表扫描。
3.尽量避免在where语句中使用!=或<>操作符,否则将导致引擎放弃使用索引而进行全表扫描。
4.尽量避免在where语句中用or来连接条件,否则将导致引擎放弃索引而进行全表扫描,可以用union all来连接两个表
5.in 和 not in也要慎用,否则会导致全表扫描。
6.like '%..%'也会导致全表扫描.
7.在where中使用参数也会导致全表扫描,可以强制加索引:select id from t whit(index(ix_test)) where num=@num.
8.尽量避免在where句子中对字段进行表达式操作,这将导致引擎放弃索引而进行全表扫描。
9.尽量避免在where子句中对字段进行表达式操作,特别是在等号左边,这将导致引擎放弃使用索引而进行全表扫描。
10.在使用索引字段作为条件时,如果该索引是复合索引,那么必须使用该索引中的第一个字段作为条件时才能保证系统使用该索引,否则索引将不会被使用, 并且尽可能的让字段的顺序和索引的顺序一致。
11.如果数据量少或者只是生成表结构,那尽量不使用临时表,改用表变量。尽量避免频繁的新建删除临时表。在数据量大的时候可以考虑用临时表,最后务必删除临时表,先truncate table再drop table,这样可以避免系统表较长时间锁定。
12.很多时候使用exists代替in会更好。
13.并不是所有的索引对表查询都有效,SQL是根据表中的数据来进行优化的,当索引列有大量的数据重复时,SQL查询可能不会去利用索引,例如sex几乎各一半,那么即使使用了索引,对查询效率也起不了作用。
14.索引不是越多越好,索引固可以提高相应的select的效率,但也同时降低了insert和update的效率,因为insert和update时,可能会重建索引,所以怎么样建索引需要慎重考虑,视情况而定。一个表的索引数量最好不要超过6个,若太多则应考虑一些不常用的列上去掉索引。
15.尽量使用数字型的字段,若只含数值信息的字段尽量不要设计为字符型,这会降低查询和连接的性能,并会增加存储开销。因为引擎在处理查询和连接时会逐个比较字符中的每一个字符,而对于数字型就只需要比较一次就够了。
16.尽可能的使用varchar/代替char/nchar,因为首先变长字段存储空间小,可以节省空间,其次对于查询来说,在一个相对较小的字段内搜索效率要高些。
19.任何地方都不要使用*号,用具有的字段代替*号,不要返回用不到的字段。
20.尽量避免使用游标,因为游标的效率较差,如果游标操作的数据超过1W行,那么就应该考虑改写。如果数据较少,也可以使用游标。
21.在所有的存储过程和触发器的开始处设置 set nocount no ,在结束时设置set nocount off。无需在持行存储过程和触发器的每个语句后都向客户端发送done_in_proc消息。
22.尽量避免大事务操作,提高系统的并发能力。
30.尽量避免向客户端返回大数据,若数据量过大,应考虑相应需求是否合理。