Mysql在互联网企业中应用非常广泛,互联网企业的特点访问量非常大,怎么样优化mysql就成了摆在我们面前的一道难题。
我们从mysql的逻辑架构说起:
最上面一层是客户端的连接服务,主要完成客户端的连接处理,授权认证。在该层有一个线程池,每一个连接从线程池中获取线程,省去了创建和销毁线程的开销。
中间这一层可以完成查询解析,分析,优化,缓存。存储过程,触发器,视图也是在这一层。
最下面一层是存储引擎,负责mysql中数据的存储和提取。
和其它数据库有所不同,mysql的存储引擎是可插拔的,可以根据不同的场合使用不同的存储引擎。
存储引擎:
存储引擎就是存储数据,更新查询数据,建立索引等等的技术实现方式,mysql5.0支持的存储引擎包括: InnoDB 、MyISAM 、BDB、MEMORY、MERGE、EXAMPLE、NDB Cluster、ARCHIVE、CSV、BLACKHOLE、FEDERATED等,其中使用最多的是InnoDB 和MyISAM,mysql5.5之后InnoDB是默认的存储引擎我们重点讨论这两个存储引擎
查看mysql默认存储引擎的命令:
show variables like '%storage_engine%'
InnoDB存储引擎和MyISAM的对比图:
InnoDB存储引擎和MyISAM存储引擎的最大区别有以下三点:
1. InnoDB支持事物,MyISAM不支持
2. InnoDB支持外键,MyISAM不支持
3. 批量插入的速度MyISAM要高于InnoDB
基于以上特点来看看在实际使用中应该如何选择存储引擎:
InnoDB存储引擎:因为InnoDB存储引擎支持事物,所以对于要求事物完整性的场合需要选择InnoDB,比如数据操作除了插入和查询以外还包含有很多更新删除操作,像财务系统等对数据准确性要求较高的系统。
MyISAM存储引擎:如果系统是以读操作和插入操作为主,只有很少的更新删除操作,并且对事物的之处没有要求那么可以选择这个存储引擎。