《Mysql-概述-架构-性能优化13项》

《Mysql-概述-架构-性能优化13项》

 

 一、概述

  MySQL是一个开放源代码的关系数据库管理系统,Web应用最多的数据库。

  

 二、架构

  Mysql是由SQL接口,解析器,优化器,缓存,存储引擎组成的。

《Mysql-概述-架构-性能优化13项》_第1张图片

 

 三、性能优化13项

  1. 使用EXPLAIN分析sql语句

   使用EXPLAIN关键字可以知道MySQL是如何处理SQL语句的。

 

2. 当只要一行数据时使用LIMIT 1

 已知道结果只有一条,加上LIMIT 1可以增加性能。MySQL数据库引擎会在找到一条数据后停止搜索,而不是继续往后查少下一条符合记录的数据。

 

3. 为常用搜索字段建索引

 索引并不一定仅给主键或是唯一的字段。若有某个字段总会经常用来做搜索,则可为其建立索引。

 

4. 在Join表的时候使用相当类型的例,并将其索引

 用来Join的字段,应该是相同的类型的。DECIMAL字段和一个INT字段Join在一起,MySQL就无法使用它们的索引。

 

5. 避免SELECT * from table

 从数据库里读出越多的数据,那么查询就会变得越慢。在分层的多台服务器会增加网络传输的负载。

 

6. 为每张表设置一个ID

 应该为数据库里的每张表都设置一个ID做为其主键

 

7. 固定长度的表会更快

 固定长度的表会提高性能,因为MySQL搜寻得会更快一些,因为这些固定的长度是很容易计算下一个数据的偏移量的。

 

8. 垂直分表(行相等)

 垂直分表是一种把数据库中的表按列变成几张表的方法,这样可以降低表的复杂度和字段的数目,从而达到优化的目的。

 比如人的基本信息(姓名、性别、年龄、手机号等)为一张表,人的详细信息(家族地址、工作地址、邮编等)为另一张表

 

9. 水平分表(列相等)

 单表行数超过800万行或者单表容量超过3GB,可进行分库分表。

 

10. 选择正确的存储引擎

 MySQL中的存储引擎MyISAM和InnoDB,每个引擎都有利有弊。

 MyISAM适合于一些需要大量查询的应用,但其对于有大量写操作并不是很好。

 MyISAM不支持行锁、事务、外键。

 InnoDB支持行锁、事务、外键。

 

11. 使用PreparedStatement,

 用PreparedStatement一般来说比Statement性能高:一个sql发给服务器去执行,涉及步骤:语法检查、语义分析、编译、缓存。

 PreparedStatements可以检查一些你绑定好的变量,这样可以保护你的程序不会受到“SQL注入式”攻击。

 

12. UNION ALL要比UNION快很多

 1) 对重复结果的处理:UNION在进行表链接后会筛选掉重复的记录,Union All不会去除重复记录。

 2) 对排序的处理:Union将会按照字段的顺序进行排序;UNION ALL只是简单的将两个结果合并后就返回。

 

13. 尽早返回

 在代码中写分页查询逻辑时,若count为0应直接返回,避免执行后面的分页语句。

 

 

转载于:https://my.oschina.net/devpmp/blog/3079896

你可能感兴趣的:(数据库)