GitHub发布2020年度报告
|
禁止使用select *进行输出,应该选择具体的字段进行输出。除了避免无用的字段造成传输上的性能损耗,还能在一定程度上避免敏感信息的泄漏。 SQL中避免出现now()、rand()、sysdate()、current_user()等不确定结果的函数。 禁止使用order by rand()。 插入语句,不要直接使用 nsert into table values(),而应该加入具体的字段,否则无法适应数据库变更情况。在做批量插入时,一次性操作100-200条就可以,没必要把batch数量设置成上千上万。 禁止非框架类业务代码,直接调用set sql_mode或者set tx_isolation,禁止使用SELECT … FOR UPDAT,优先采用乐观锁实现。 多表关联不要超过3个,尽量拆分成简单的SQL处理。 大多数开发人员会在需要时写UNION,这往往会导致执行一个排序来消除重复。应该尽量使用UNION ALL来代替UNION。 注意OR语句的一些改善情况。比如WHERE id=1 OR id=2可以 改写为WHERE id IN(1,2)。在不同的字段,可以将OR改写为UNION ALL。 4. 命名规范 数据库表和字段的命名,不要使用驼峰命名方式。比如,不能叫saleOrder,而应该叫做sale_order。因为大多数数据库,都不区分大小写,下划线命名会更安全。 这些命名,只能使用英文小写字母、数字和下划线,长度不超过17个字符。 命名应该有确切的含义。和代码规范一样,不允许使用a,b等无意义的字符串。不允许中文拼音缩写、中英文混用等。 严禁出现哥哥表和妹妹字段。
5. 安全安全安全图片 选择性很小的字段(低基数列),不要加索引。比如一些state,type,布尔判断等。因为加了也没用。 尽量让索引的内容尽量的短!比较长的子段,要使用前缀索引。比如:title varchar (64) ,可以创建前缀索引 idx_title (title(16))。 合理利用索引的最左原则,合并相似的索引。比如 (a) (ab) (abc)三种索引需求,我们只需要创建abc这一个索引就ok了。 避免在索引列做计算(这将造成索引失效),比如 data_format(created_date),substring(short_name,0,6) = 'xjjdog'。 不能使用%前缀模糊查询,因为无法使用索引,例如:WHERE name LIKE '%味道'。 不能使用数据库端做全文检索操作。虽然它支持,也不要这么做。 索引的命名要有章可循:idx_前缀表明是普通索引,而 uk_前缀表明的是唯一索引。 3. SQL规范 建议在每个表中,添加下面三个字段。其实,SpringBoot JPA,也建议你添加上这三个字段。根据时间字段,除了审计,还能够做一些非常nice的迁移操作;version字段是高并发下的乐观锁实现,UPDATE语句可以结合version字段,避免并发操作造成的不一致情况。
大多数字段应该定义成not null的,并分配默认值,但是不要default null,因为数据库无法索引null值。 复杂的SQL查询语句,是绝对要避免的。我们所说的,就是慢查询。慢查询会占用大量资源,并阻塞线程,应该见谅将大SQL拆分成多条简单的SQL,减少数据的锁定时间。 (编辑:淮安站长网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
