java程序性能优化(1)-Mysql性能调优

Java程序性能优化一般会从如下几方面进行:

  • MySQL调优
  • Tomcat调优
  • JVM调优

MySQL调优
1.索引
一般区分度在80%以上的时候就可以建立索引,区分度可以使用 count(distinct(列名))/count(*) 来计算。

前缀索引,就是用列的前缀代替整个列作为索引 key,当前缀长度合适时,可以做到既使得前缀索引的区分度接近全列索引,同时因为索引 key 变短而减少了索引文件的大小和维护开销,可以使用 count(distinct left(列名, 索引长度))/count(*) 来计算前缀索引的区分度。

SELEC * FROM employees.employees WHERE first_name=‘Eric’ AND last_name=‘Anido’;
可以建立索引:(firstname, lastname(4))

业务上具有唯一特性的字段,即使是多个字段的组合,也必须建成唯一索引。
如果明确知道只有一条结果返回,limit 1 能够提高效率。
select * from user where login_name=? limit 1

.SQL 性能优化 explain 中的 type:至少要达到 range 级别,要求是 ref 级别,如果可以是 consts 最好。

  • consts:单表中最多只有一个匹配行(主键或者唯一索引),在优化阶段即可读取到数据。
  • ref:使用普通的索引(Normal Index)。
  • range:对索引进行范围检索。
  • 当 type=index 时,索引物理文件全扫,速度非常慢。

2、查询的基本原则

  • 永远用小结果集驱动大结果集(很多研发不会注重这些,都是习惯性的 left join),做 join 查询时,驱动表,一定是条件限定后记录较少的表
  • 只查询需要的列(研发人员早起可能为了项目大多是 select _,后期优化必须关注)
  • 仅仅使用最有效的过滤条件
  • 尽量避免复杂的 join 和子查询
  • 尽量在索引列上完成排序和查询

你可能感兴趣的:(MySQL)