在工作中,有时我们往往因数据加载缓慢而烦恼,尤其是在大数据下就更让人耿耿于怀了,加载慢有很多原因,但可能我们在SQL语句上多努力20%就很有可能使整体的性能上升80%,可能在代码上优化10%就再提升10%。我们的目的只有一个,那就是让速度跑起来。以下是我在项目中的实战经验,并且屡试不爽,希望能帮你提升那90%的性能。
一、SQL SELECT语句
1.SQL语句中禁止出现SELECT *,哪怕是查询整张表的全部字段;
2.对数据及时性要求不高的表添加 WITH (NOLOCK);
3.避免跨库查询,对非跨库查询只写表名即可,不能添加前缀 [DATABASENAME].[DBO];
4.计数的查询使用 COUNT(主键ID) 代替 COUNT(*);
5.只查询是否存在记录时使用EXISTS或(TOP 1 主键ID) 即可;
6.将复杂的SQL语句拆分,最后在合并,建议使用存储过程;
7.表设计要合理,避免在语句中对字段类型进行转换,删除JOIN和WHERE子句中的转换与计算字段;
8.大数据下使用连接查询代替子查询,必要时可使用视图;
9.使用表变量代替临时表,触发器不建议多用,尽量不使用游标(大数据下会导致连接超时);
10.使用UNION或NUION ALL 代替OR查询;
11.尽量使用全值查询代替LIKE查询,避免不了也尽可能减少通配符('%Value' 、'Value%');
12.对于不必要的表或记录和重复的表或记录都应该删除掉;
13.进入GROUP BY的数据应该是有效的数据,没必要的数据之前就筛选掉;
14.在索引列上使用IS NULL和IS NOT NULL会使索引失效,用 !='' 或 >0 代替。
二、检查索引
大数据下索引非常重要也非常有效,学问很深,值得研究,建议在SQL语句的WHERE和JOIN部分中用到的所有字段上,都应该加上索引。
三、程序角度
1.SQL连接开闭要合理及时;
2.尽可能少的请求数据库,多次请求可使用存储过程代替;
3.使用DATATABLE 代替DATAREADER;
4.使用参数化查询,哪怕只有一个条件;
5.可将不常改变的数据放入缓存。
程序架构设计、服务器配置对项目的性能也有很大影响。在改变不了这两者的情况下,还是老老实实的优化自己的代码吧!本人资历尚浅,如有问题还望多多指教。此篇可能与网上其他会有雷同,仅当个人记录,如若需要可尽兴转走。