1不要在docker里存数据
千万不要在docker里装mysql,因为docker容器停了以后,里面的数据就没有了,即使有一些操作可以使得docker映射到操作系统上,但是还是十分不建议用docker存数据、日志等,因为你能保证你就配置的没问题吗。
2不要在MySQL中做复杂的逻辑
不要在MySQL中做复杂的逻辑,各种group by,各种like,各种多表查询。举一个很简单的例子,有一张站点表和站点日志表,查询站点的报道率(某站点日志表中某字段不为空的数量/某时间段的总数量),其实这个逻辑在MySQL中可以做,在Java的业务层也可以做,这个时候我推荐在Java的业务层做。有两个好处,其一为如果在MySQL中运行复杂的SQL,会拖垮整个MySQL的效率;其二你的SQL语句别人看不懂啊。
3 注意端口安全问题
一般情况下MySQL的端口为3306,但是当你在部署的时候,建议改一个端口,否则当一个人拿到一个服务器的账号很自然就的就去3306端口访问一下,其实还是有安全问题的。
4 能一次查询的别多次查询
举一个例子,查询所有的成绩并且带班级信息,一般的逻辑就是查询所有的学生,然后遍历学生信息,对每一个学生的班级信息查询数据库,这样有多少个学生就查多少次班级表,其实完全可以一次把所有的班级信息查询出来,存到map里,然后用的时候直接在map里取。
案例
List<Student> students = studentDao.select(); for (Student student:students){ student.setClassName(classNameDao.selectBy(student.getClassId)); }1. LiList<Student> students = studentDao.select(); for (Student student:students){ student.setClassName(classNameDao.selectBy(student.getClassId)); }
优化
List<ClassName> classNames = classNameDao.select(); Map<Integer, Object> classNameMap = new HashMap<>(); for (ClassName className:classNames){ classNameMap.put(className.getId(), className); } List<Student> students = studentDao.select(); for (Student student:students){ student.setClassName(classNameMap.get(student.getClassId)); }
6 千万不要没事格式化代码
千万不要没事格式化代码,因为也许你的代码风格和别人的不一样,所以你只需要格式化自己写的方法和类就行了,否则合并代码很难受。
7 MySQL数据备份有两种,一种是binlog主从复制,一种是查询并插入
后者的话建议查询的时候加一个limit,因为如果你的程序1号断了,现在7号了,你一重启的程序的话会查询大量的数据,增加MySQL的压力。
8一定要看文档
一顿操作猛如虎,一看文档和要求的不一样的