Mysql之存储引擎


没有where的count(*)使用MyISAM要比InnoDB快得多。因为MyISAM内置了一个计数器,count(*)时它直接从计数器中读,而InnoDB必须扫描全表。所以在InnoDB上执行count(*)时一般要伴随where,且where中要包含主键以外的索引列。为什么这里特别强调“主键以外”?因为InnoDB中primary index是和raw data存放在一起的,而secondary index则是单独存放,然后有个指针指向primary key。所以只是count(*)的话使用secondary index扫描更快,而primary key则主要在扫描索引同时要返回raw data时的作用较大。MyISAM相对简单,所以在效率上要优于InnoDB,小型应用可以考虑使用MyISAM。



MyISAM和InnoDB两者的应用场景:

1) MyISAM管理非事务表。它提供高速存储和检索,以及全文搜索能力。如果应用中需要执行大量的SELECT查询,那么MyISAM是更好的选择。

2) InnoDB用于事务处理应用程序,具有众多特性,包括ACID事务支持。如果应用中需要执行大量的INSERT或UPDATE操作,则应该使用InnoDB,这样可以提高多用户并发操作的性能。

但是实际场景中,针对具体问题需要具体分析,一般而言可以遵循以下几个问题:

-  数据库是否有外键? 

-  是否需要事务支持? 

-  是否需要全文索引? 

-  数据库经常使用什么样的查询模式?在写多读少的应用中还是Innodb插入性能更稳定,在并发情况下也能基本,如果是对读取速度要求比较快的应用还是选MyISAM。 

-  数据库的数据有多大? 大尺寸倾向于innodb,因为事务日志,故障恢复。

Mysql存储引擎之memory

(1)memory是基于内存数据的存储引擎

(2)一张memory表,在磁盘上有一个表定义文件(.frm),在内存中保存数据。

(3)特点:基于内存,所以访问速度特别快。

(4)默认使用Hash索引,也可以指定B树索引。

(5)注意:mysql服务关闭,则表的数据就会丢失。

(6)使用memory,要注意内存是否足够。对不用的memory表,要及时删除或truncate;

(7)每个memory表的大小受系统变量max_heap_table_size的约束,初始值为16MB

(8)可以在使用--init-file选项包含一个文件,在文件中写入诸如

        insert into ...select  或者 load data infile 。

       效果是在mysql服务启动时,从持久稳固的数据源中装载数据。


MySQL Memory 存储引擎浅析 - yutingliuyl - 博客园

MySQL两种存储引擎: MyISAM和InnoDB 简单总结 - 散尽浮华 - 博客园

你可能感兴趣的:(Mysql之存储引擎)