SQL提高性能
1、对外键建立索引,大数据量时性能提高明显(建索引可以直接【Merge Join】,否则还须在查询时生成HASH表作【Hash Join】)
2、尽量少使用inner join,使用left join是更好的选择
3、对where 条件建立索引,where 条件中列顺序与索引顺序一致,使用前置的模糊查询时,索引无效
4、有时候使用union 比join 效率更好(因为join连接比较费时)
5、有时候自定义函数比长的SQL更有效(是因为函数是已编译过的,长SQL是在执行是编译?)
6、使用exists(not exists)函数替代in(not in),大数据量时效率提高明显(很好理解,exists,在查询时直接匹配对应的项,而in,则每一个匹配的内容都要便利in的内容)
使用exists(not exists)函数替代in(not in),提高执行效率
select RoomTypeId from roomtype where roomtypeid not in
(select roomtype from fun_SelectPrice('2007-10-28','2007-12-11',100,300))
select RoomTypeId from roomtype where not exists
(select * from fun_SelectPrice('2007-10-28','2007-12-11',100,300) where roomtypeid =roomtype )
http://www.cnblogs.com/zihunqingxin/archive/2013/06/15/3137610.html 也有类似的举例
7、 索引不可过多,索引过多将会使Insert ,Update, Delete变慢
C#中使用SQL注意:
1、建立尽量少的connection,连接是宝贵资源。
2、尽量少的执行command
3、transaction应尽量晚开始,尽量快终止
4、尽量少的使用前置模糊查询,前置模糊查询索引失效。
5、必要时使用存储过程,存储过程,减少通信(长SQL,只个别参数的区别),减少编译时间,存储过程是编译好的直接执行