发表于: 2017-08-17 22:11:57

1 1102


今天完成:

收获:

1.三天前老大的一个问题:如何查询公司发布的职位数量效率最高?

Select count(1) from occupation where company_id=x;

想不出再优化的办法了,之能这么写吧?

2.反思了一下DB的设计,找到一些不合理的地方:

1.mysqlboolean应该用tinyintdb里则使用了int,增加了空间占用。

2.db里一些字段如phonecountry使用了varchar,但最好使用数字类型。字符型会降低查询和连接的性能,并会增加存储开销。这是因为引擎在处理查询和连 接时会逐个比较字符串中每一个字符,而对于数字型而言只需要比较一次就够了。

3.Db设计较为混乱,是否为空每个表都不统一。建议最好不要给数据库留NULL,尽可能的使用 NOT NULL填充数据库,并赋默认值。因为如果为空,使用子查询查询非主键的字段就可能有空值null这时就必须加is not null/is null判断,加这个判断会使索引失效。而且不管是否为空,db该数据类型占用的空间是一定的(除了varchar),建议赋默认值0/1

4.db里没加索引,除了主键自带索引其他的使用dal生成的时候似乎没加进去。应在一些表连接字段和查询频繁的字段上加上索引其他一些字段可以不考虑,就算加索引,每张表的索引数量也应不超过6个。

5.在dal里面使用了%xx%的模糊查询。会使索引失效而进行全表扫描,而且由于匹配算法的原因,模糊查询字段越长,效率越低。如果一定要使用模糊查询,可以使用右模糊查询‘xx%’,这种是走索引的。全模糊查询没法优化,可以考虑建全文检索,再不行可以用搜索引擎。不知道在dal里写全模糊查询是怎么处理的。

3.

匿名内部类:以类似构造方法的形式创建匿名类。创建匿名内部类调用方法,同时会创建一个对象。

应用范围:仅需要使用一次的类

getJdbcTemplate().update(new PreparedStatementCreator() {

public PreparedStatement createPreparedStatement(Connection connection) throws SQLException {
PreparedStatement psst = connection.prepareStatement(sql, new String[]{"id"});
       psst.setString(1, permission.getPermission());
       psst.setString(2, permission.getDescription());
       psst.setBoolean(3, permission.getAvailable());
       return psst;
   }
}, keyHolder);


问题:

计划:

写复盘

进度:

延期

角色权限模块快写完了


返回列表 返回列表
评论

    分享到