面试集锦(七)数据库

175 阅读2分钟

如何防止sql注入

  1. 最有效的方法,采用预编译指令集
  2. 使用正则表达式过滤参数
  3. 字符串过滤或替换
  4. 前端判断是否有非法字符,寻找出能sql注入的地方

mysql常用的优化方法

索引优化 (索引使用的是B+ tree)

  1. 列中有空值不建索引
  2. 使用短索引
  3. 对where子句使用的列建立索引
  4. 多个列where或order by的建立组合索引
  5. 对like语句,%开头不用结尾用(最左不用原则)  why:索引相当于字典,不知道开头怎么查?

sql优化

  1. 使用join语句,使用内连接代替外连接,使用小表驱动大表
  2. 使用explain分析查询语句
  3. 查询日志,对执行慢的sql进行优化
  4. 千万级分页时使用limit
  5. 对于经常使用的查询,开启缓存
  6. 批量操作

表的优化

  1. 字段尽量设置为not null
  2. 字段长度固定

数据库优化

  1. 将表分区
  2. 读写分离/建立主从关系

mybatis的实现原理

根据配置->创建SQL sessionfactory->(根据配置文件,注解)sqlsession->执行映射的sql语句->关闭sqlsession。

悲观锁与乐观锁

悲观锁与乐观锁的实际应用

乐观锁

首先假设数据冲突很少,只有在数据提交修改的时候才进行校验,如果冲突了则不会进行更新。

通常的实现方式增加一个version字段,为每一条数据加上版本。每次更新的时候version+1,并且更新时候带上版本号。

乐观锁在实际应用相对较多,它可以提供更好的并发访问,并且数据库开销较少,但是有可能存在脏读的情况。

悲观锁

当一个事务锁定了一些数据之后,只有当当前锁提交了事务,释放了锁,其他事务才能获得锁并执行操作。

悲观锁一般是用于并发不是很高,并且不允许脏读等情况。但是对数据库资源消耗较大。

数据库的水平拆分与垂直拆分

数据库的水平拆分与垂直拆分