《Mysql-概述-架构-性能优化13项》
一、概述
MySQL是一个开放源代码的关系数据库管理系统,Web应用最多的数据库。
二、架构
Mysql是由SQL接口,解析器,优化器,缓存,存储引擎组成的。
三、性能优化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应直接返回,避免执行后面的分页语句。