java面试——数据库优化方面

一、定位:查找、定位慢查询

1、查找并定位慢查询

在项目自验转测试之前,在启动mysql时开启慢查询,并且把执行慢的语句写到日志中,在运行一定的时间后,查找日志。通过查看日志,找到慢查询语句。使用explain,来详细分析语句的问题。

二、优化手段

1、使用索引

创建合适的索引,就可以在索引中查询,查询到以后直接找相对应的记录

①索引是什么 ——  一种帮助DBMS高效获取数据的数据结构

②分类

普通索引:允许重复值出现

唯一索引:不能有重复的记录,其它与普通索引相同

主键索引:随着设定主键而创建的,唯一且没有null值

全文索引:对表中文本域进行索引,只在myisam中有效

缺点:

①、占用磁盘空间

②、使dml(插删改)变慢

因此如果不查询的字段,创建索引就无意义,不是只有几个值的字段,变化不频繁的字段,也不使用索引。

2、分表

当一张表的数据比较多,或者一些表的字段的值比较多,我们就可以水平分表,或者垂直分表来优化。

①、水平分表 

根据经验,当Mysql数据到达百万级别,查询效率会很低,容易造成表锁,堆积连接,直到挂掉,因此水平分表能减少压力。

(1)、按时间分表--时效性较强

(2)、按区间分表

(3)、hash分表

②、垂直分表

很少情况下会查询,字段值又多,就把多的字段通过外键关联,单独分到一个表中。

3、读写分离

一台服务器不能满足要求,采用读写分离的方式进行集群。

一台数据库支持的最大并发连接数是有限的,如果用户并发访问太多,一台服务器满足不了要求时,就可以集群处理。其中读写分离是最常用的集群技术。

①、确保主从要同步

确保不同数据库服务器的数据是一致的。 能改变数据库的操作都往主数据库去写。其它的数据库从主数据库上同步数据。

②、使用负载均衡

使用负载均衡来实现写的操作都往主数据库去,而读的操作都往从数据库。

4、使用缓存技术

在持久层,和数据库之间添加一个缓存层。 用户访问时,可以直接从缓存中获取。

①、memcached 不支持分布式缓存

②、使用redis来做中央缓存

5、SQL语句优化

①、批量插入数据,先去除键,操作完成后,再恢复。

②、关闭唯一效验

③、修改事务的提交方式

④、变多次提交为一次

⑤、Order by多使用索引排序

⑥、确保on上面的字段有索引

⑦、明确写出要查询的列,尽量不使用*

⑧、尽量不要在where里面使用不等号或者null值判断,或者使用like,会导致全表扫描

⑨、可使用exist代替in

三、选择合适的存储引擎

1、MyISAM存储引擎 

对事务要求不高,同时以查询和添加为主,查询添加

2、INNODB

对事务要求高,保存的都是重要数据

3、Memory

数据变换频繁,不需入库,速度极快,查询修改

 

不同存储引擎的特点:

  • 5
    点赞
  • 43
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值