数据库开发规范

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/u014172271/article/details/79949149
1.建议使用预编译的语句进行数据库操作。
只传递参数,比传递sql语句更高效。
相同语句可以一次解析,多次使用,提高处理效率,还可以防止sql注入。
2.避免数据类型隐式转换。
隐式转换发生在where语句中,当列类型和参数类型不一致的时候就会出现。
隐式转换可能导致索引失效。
举个例子:select name, phone from user where id = '111'
3.合理利用表上已有的索引而非增加索引。
避免使用双%号的查询条件。按照btree树结构,可以右边加%是走索引的。
一个sql只能利用到符合索引中的一列进行范围查询。
使用left join或not exists来优化not in操作。
4.程序链接不同的数据库使用不同的账号,禁止跨库查询。
为数据迁移和分表分库留出余地。
降低业务耦合度。
避免权限过大而产生的安全问题。
5.禁止使用不含字段列表的insert语句。
insert into t_values('a','b','c');
insert into t(c1,c2,c3) values('a','b','c');
可以防止表结构变更带来的影响。
6.禁止使用子查询。把子查询优化为Join操作。
子查询返回的结果集无法使用索引。
通常存在一张临时表中。数据量越大越影响性能。
消耗过多的CPU以及IO资源。
7.避免使用JOIN关联太多的表。
每join一个表会多占用一部分内存(join_buffer_size);join表越多可能会产生内存溢出现象。 

关联操作会产生临时表,影响性能。

        mysql最多允许61张表联查,但是建议不超过5个表联查

8.减少同数据库的交互次数。

   (1)数据库更适合批量操作。数据库返回一条数据和多条数据在内部实现基本上是相同的。

   (2)合并多个相同的操作到一起,可以提高处理效率。

9.使用in代替or。in可以更有效的利用索引,or利用的少。in个数不超过500个。

10.禁止使用order by rand()进行随机排序。

11.禁止在where从句中进行函数转换和计算。

 对列进行函数转换或计算会导致无法走索引。

12.在明显不会由重复值的情况下使用union all而非union。

union会把所有数据放到临时表中然后去重。

union all不会去重。

13.拆分复杂的大sql为多个小sql。

mysql一个sql只能使用一个cpu进行查询。若一个sql执行时间太长,那么查询性能就会下降。

在多核cpu年代我们可以通过并行处理将多个大SQL拆分为多个子SQL,提高查询效率。

阅读更多
想对作者说点什么? 我来说一句

没有更多推荐了,返回首页