RDS for MySQL使用规范
查看PDF
RDS for MySQL使用规范
数据库命名规范 数据库对象的命名要能做到见名知意,并且不超过32个字符。 数据库中用到的临时表以“tmp”为前缀并
|
更新时间:2022-12-07 GMT+08:00 查看PDF RDS for MySQL使用规范 数据库命名规范 数据库对象的命名要能做到见名知意,并且不超过32个字符。 数据库中用到的临时表以“tmp”为前缀并以日期为后缀。 数据库中用到的备份表以“bak”为前缀并以日期为后缀。 在不同的库或表中,要保证所有存储相同数据的列名和列类型必须一致。 数据库基本设计规范 数据库字段设计规范 数据库索引设计规范 索引列顺序: 避免冗余的索引,如:primary key(id),index(id),unique index(id) 避免重复的索引,如:index(a,b,c),index(a,b),index(a),重复的和冗余的索引会降低查询效率,因为RDS for MySQL查询优化器会不知道该使用哪个索引。 在VARCHAR字段上建立索引时,需指定索引长度,没必要对全字段建立索引,根据实际文本区分度决定索引长度即可。 一般对字符串类型数据,长度为20的索引,区分度会高达90%以上,可以使用 count(distinct left(列名, 索引长度))/count(*) 的区分度来确定。 对于频繁查询优先考虑使用覆盖索引。 覆盖索引指包含了所有查询字段的索引,不仅仅是WHERE从句GROUP BY从句中的列,也包含SELECT查询的列组合,避免InnoDB表进行索引的二次查询。 外键约束: 建立外键关系的对应列的字符集必须保持一致或者存在外键关系的子表父表的字符集保持一致。 数据库SQL开发规范 避免使用子查询,子查询会产生临时表,临时表没有任何索引,数据量大时严重影响效率。建议把子查询转化成关联查询。 避免使用JOIN关联太多的表,建议不要超过5个表的JOIN操作。需要JOIN的字段,数据类型必须绝对一致。 每JOIN一个表会多占用一部分内存(由“join_buffer_size”控制),会产生临时表操作,影响查询效率。避免使用自然连接(natural join)。 尽量减少同数据库的交互次数,数据库更适合处理批量操作。 使用IN代替OR IN操作可以有效的利用索引,IN的值不要超过500个。 不使用反向查询,如:NOT IN、NOT LIKE 禁止使用ORDER BY RAND()进行随机排序。 该操作会把表中所有符合条件的数据装载到内存中进行排序,消耗大量的CPU和IO及内存资源。 推荐在程序中获取一个随机值,然后根据随机值从数据库获取数据。 在不需要去重的情况下,要使用UNION ALL代替UNION。 UNION ALL不需要对结果集再进?行排序。 合并多个相同操作到一起,可以提高处理效率,数据库更适合处理批量操作。 通过批量操作减少同数据库交互次数。 超过100万行的批量写操作,要分批多次进行操作。 大批量写操作可能会造成严重的主从延迟。 如果有ORDER BY的场景,请注意利用索引的有序性。 正例:where a=? and b=? order by c;mysql使用,索引:a_b_c 反例:索引中有范围查找,那么索引有序性无法利用,如:WHERE a>10 ORDER BY b;,索引a_b无法排序。 尽量使用ANSI SQL标准语法进行DML操作,而不是用MySQL扩展的SQL语法。常见的MySQL扩展SQL语法有: 不建议使用存储过程,存储过程难以调试和扩展,更没有移植性。 不建议使用触发器,事件调度器(event scheduler)和视图实现业务逻辑,这些业务逻辑应该在业务层处理,避免对数据库产生逻辑依赖。 不建议使用大事务,业务允许的情况下,事务里包含SQL语句越少越好,尽量不超过5个。因为过长的事务会导致锁数据较久,以及MySQL内部缓存、连接消耗过多等问题。 TRUNCATE TABLE比DELETE速度快,且使用的系统和日志资源少,如果删除的表上没有TRIGGER,且进行全表删除,建议使用TRUNCATE TABLE。 父主题: RDS for MySQL (编辑:天瑞地安资讯网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |

