Mysql 性能优化3 如何选择存储引擎

Mysql 使用 插件式存储引擎

Mysql 体系结构

mysql服务层

存储引擎层

都属于存储引擎                           

MyISAM 存储引擎

   frm 是记录结构的, MYD和 MYI 是MyISAM 特有的

  例   

表级锁,对数据进行修改时需要全表加锁。读取时也是需要家共享锁。对读写操作并发性不是很好,但是只读的话不怎么影响,共享锁不阻塞共享锁

支持全文索引。

支持text,blob,前500个字符的前缀索引。

如果是只读表的话,就是没有修改操作的表, 可以压缩操作。压缩后的表不能进行插入。

什么时候MyISAM

Innodb 存储引擎

   支持小事务

frm 是记录表结构的  idb 是存储数据的  。  如果是OFF  ibdata1

frm 文件 。 数据字典   表,列,索引的相关信息

ACID特性  原子性,一致性,隔离性,持久性

实现以上特性。 从做日志 Redo log主要实现持久性, 回滚日志  Undo log

锁的粒度 : 表级锁, 行级锁。

行级锁 :写操作时,锁定资源更少,支持并发更多。

阻塞:一个在等另一个资源的释放,就是阻塞。阻塞是为了并发并正常运行。大量阻塞就会出现问题,性能整体下降。

死锁:两个或两个以上的相互占用了互相等待的资源,产生异常。数据库会自动发现死锁。

CSV 存储引擎

以文件方式存储的,可以查看文件命令直接查看。

CSV适用场景

Archive 存储引擎

Memory 存储引擎

IO效率高,数据存在内存中,重启mysql 数据会消失,但是结构会保留。

           合适的索引类型对性能影响很重要。

  

Federated 引擎

如何选择正确的存储引擎

是否需要事务支持 : Innodb 是目前来说最稳定并且经过验证的存储引擎

如果不需要事务,并且主要是INSERT 和 SELECT 操作 也可以使用MyISAM

          如果只有insert ,select 少的话可以选用Archive(例如日志)

备份的考虑:生产环境中,可以在线热备的存储引擎,只有Innodb 有免费的热备方案。

      mysqldump备份属于逻辑备份,保证数据的一致性所以需要加锁。

崩溃恢复 : myisam 损坏率更高,恢复速度慢

考虑存储特有特性。

除非万不得已,不要使用多种存储引擎。

例如 Innodb 和 Myisam 的混合使用,事务回滚的时候 Innodb回滚,myisam并没有回滚,数据上会有问题。

如果进行热备,Innodb有热备,myisam没有。也会出问题。

时间: 2024-09-30 05:22:39

Mysql 性能优化3 如何选择存储引擎的相关文章

MySQL性能优化(一)-- 存储引擎和三范式

一.MySQL存储引擎 二.存储引擎如何选择 是否支持事务 检索和添加速度 锁机制 缓存 是否支持全文索引 是否支持外键 三.MyISAM和InnoDB对比 四.什么时候使用MyISAM和InnoDB MyISAM:读事务要求不高,以查询和插入为主,例如各种统计表. InnoDB:对事务要求高,保存的是重要的数据,例如交易数据,支付数据等,对用户重要的数据,建议使用InnoDB. 五.配置和数据文件 1.配置文件默认位置 Linux: /etc/my.cnf Windows: my.ini 2.

MySql性能调优一(存储引擎InnoDB,MyISAM)

区别 MyISAM基于ISAM存储引擎,并对其进行扩展,不支持事务. InnoDB给mysql提供了事物提交.回滚等事物安全的存储引擎. MyISAM采用表级锁.表级锁开销小,加锁快,锁粒度大,冲突概率高,并发度低,不会出现死锁. InnoDB支持表级锁与行级锁,默认为行级锁.行级锁开销大,加锁慢,锁粒度小,冲突概率低,并发度高,会出现死锁. MyISAM读写操作是串行的,如果读写同时操作同一张表,写进程优先获取锁,所以不适合有大量更新与读取操作的项目,适合读操作多的少量数据. InnoDB存储

Mysql性能优化(四)--MySQL优化

Mysql 优化 一.使用索引进行优化 在mysql中,创建数据表后会生成数据文件,索引文件,后缀名为.MYI的文件就是索引文件.索引的原理就是通过空间换取时间,所以索引并不是建立的越多越好. 我们可以通过explain的结果来分析该查询语句是否使用了索引.通过查看type,extra和rows的结果是可以看出来的. type的结果为all表示肯定没有使用索引: extra的结果中如果是using index则表示使用了索引,如果extra的结果为空则表示没有使用索引. rows的结果如果等于全

mysql那些事(5)建表存储引擎的选择

在mysql见表的时候,会遇到选择存储引擎:MyISAM和InnoDB.究竟用哪种存储引擎好呢? 1.MyISAM:表锁:支持全文索引:读并发性能较好. 2.InnoDB:行锁:支持事务,支持外键:写并发性能较好. 实际上,现在大多数的公司里,mysql的规定都是使用InnoDB作为默认存储引擎,除了支持事务和行锁是比较重要的两个原因外,其实MyISAM在实际应用场景中意义也不大,并且一个重要原因是,官方支持力度大.oracle很早就收购了InnoDB,后面又收购了mysql,现在重点发展Inn

MySQL 性能优化的最佳20多条经验分享

今天,数据库的操作越来越成为整个应用的性能瓶颈了,这点对于Web应用尤其明显.关于数据库的性能,这并不只是DBA才需要担心的                    事,而这更是我们程序员需要去关注的事情. 当我们去设计数据库表结构,对操作数据库时(尤其是查表时的SQL语句),我们都需要注意数据操作的性能.这里,我们不会讲过多的SQL语                句的优化,而只是针对MySQL这一Web应用最多的数据库.希望下面的这些优化技巧对你有用. 1. 为查询缓存优化你的查询 大多数的M

MySQL性能优化的最佳20+条经验

http://www.pythonclub.org/mysql/optimize-20-tips 今天,数据库的操作越来越成为整个应用的性能瓶颈了,这点对于Web应用尤其明显.关于数据库的性能,这并不只是DBA才需要担心的事,而这更是我们程序员需要去关注的事情.当我们去设计数据库表结构,对操作数据库时(尤其是查表时的SQL语句),我们都需要注意数据操作的性能.这里,我们不会讲过多的SQL语句的优化,而只是针对MySQL这一Web应用最多的数据库.希望下面的这些优化技巧对你有用. 1. 为查询缓存

mysql性能优化-慢查询分析、优化索引和配置

一.优化概述 二.查询与索引优化分析 1性能瓶颈定位 Show命令 慢查询日志 explain分析查询 profiling分析查询 2索引及查询优化 三.配置优化 1)      max_connections 2)      back_log 3)      interactive_timeout 4)      key_buffer_size 5)      query_cache_size 6)      record_buffer_size 7)      read_rnd_buffer

?二十种实战调优MySQL性能优化的经验

?http://www.searchdatabase.com.cn/showcontent_58391.htm [为查询缓存优化你的查询] 像 NOW() 和 RAND() 或是其它的诸如此类的SQL函数都不会开启查询缓存,因为这些函数的返回是会不定的易变的.所以,你所需要的就是用一个变量来代替MySQL的函数,从而开启缓存. [EXPLAIN 你的 SELECT 查询] 使用 EXPLAIN 关键字可以让你知道MySQL是如何处理你的SQL语句的. [当只要一行数据时使用 LIMIT 1] 当

20多条MySQL 性能优化经验分享

当我们去设计数据库表结构,对操作数据库时(尤其是查表时的SQL语句),我们都需要注意数据操作的性能.这里,我们不会讲过多的SQL语句的优化,而只是针对MySQL这一Web应用最多的数据库.希望下面的这些优化技巧对你有用. 1. 为查询缓存优化你的查询 大多数的MySQL服务器都开启了查询缓存.这是提高性最有效的方法之一,而且这是被MySQL的数据库引擎处理的.当有很多相同的查询被执行了多次的时候,这些查询结果会被放到一个缓存中,这样,后续的相同的查询就不用操作表而直接访问缓存结果了. 这里最主要