一、Web前端层面:
1.1 图片资源的压缩;
1.2 js、css资源的压缩。
二、业务逻辑代码层面:
2.1 禁止循环体内查询数据库;
2.2 将常用的配置型数据存至Redis;
2.3 使用 StringBuilder 的 append 方法。
(说明:循环体内,字符串的连接方式,使用 StringBuilder 的 append 方法进行扩展。下例中,反编译出的字节码文件显示每次循环都会 new 出一个 StringBuilder 对象, 然后进行 append 操作,最后通过 toString 方法返回 String 对象,造成内存资源浪费。)
//反例:
String str = "start";
for (int i = 0; i < 100; i++)
{
str = str + "hello";
}
三、数据库层面:
3.1 适当冗余,以提高查询性能;
(说明:打破第三范式标准,适当冗余,以提高查询性能,但必须考虑数据一致。冗余字段应遵循:1)不是频繁修改的字段。2)不是 varchar 超长字段,更不能是 text 字段。)
3.2 数据库表字段数据结构的错误设置;
(说明:合适的字符存储长度可提升检索速度。并且错误的数据类型也影响查询速度。)
3.3 索引;
(说明:业务上具有唯一特性的字段,即使是多个字段的组合,也必须建成唯一索引。)
3.4 join;
(说明:join 的字段,数据类型必须绝对一致;多表关联查询时,保证被关联的字段需要有索引。)
3.5 order by;
(说明:利用索引的有序性。order by 最后的字段是组合索引的一部分,并且放在索引组合顺序的最后。)
正例:where a=? and b=? order by c; 索引:a_b_c
反例:索引中有范围查找,那么索引有序性无法利用,如:WHERE a>10 ORDER BY b; 索引 a_b 无法排序。
3.6 利用延迟关联或者子查询优化超多分页场景;
(说明:先快速定位需要获取的 id 段,然后再关联:SELECT a.* FROM 表 1 a, (select id from 表 1 where 条件 LIMIT 100000,20 ) b where a.id=b.id)
3.7 建组合索引的时候,区分度最高的在最左边;
正例:如果 where a=? and b=? ,如果 a 列的几乎接近于唯一值,那么只需要单建 idx_a 索引即可。
(说明:存在非等号和等号混合时,在建索引时,请把等号条件的列前置。如:where c>? and d=? 那么即使 c 的区分度更高,也必须把 d 放在索引的最前列,即索引 idx_d_c)
3.8 防止因字段类型不同造成的隐式转换,导致索引失效。
相关阅读 >>
关于.net c# sql数据库sqlhelper类实例代码
更多相关阅读请进入《数据库》频道 >>
C#高级编程(第11版) C# 7 & .NET Core 2.0(.NET开发经典名著)
作者:[美]克里斯琴·内格尔(Christian Nagel)著。出版时间:2019年3月。