MyISAM和InnoDB的基本区别

1.innodb不支持全文索引的类型。

2.innodb不保存表的具体行数,也就是说,当执行select count(*)从表,InnoDB会扫描整个表来计算行数,但MyISAM只是读取保存的行数。请注意,当计数(*)语句包含在的条件下,两个表的操作是一样的。

3、对auto_increment类型字段,InnoDB必须包含这个领域的唯一指标,但在MyISAM,它可以建立与其他领域的联合指数。

当4.delete从表,InnoDB不重建一个表,但line.myisam行表InnoDB是行锁

从掌握5.load表的操作(从主负载表)InnoDB不工作。解决的办法是改变InnoDB表MyISAM表,然后导入到InnoDB表,但它并不适用于额外的InnoDB特征(如表的外键)。

此外,在InnoDB表的行锁也不是绝对的。如果执行SQL语句,MySQL无法确定要扫描的范围。InnoDB表也将锁定整个表,如更新表设置Num = 1,名字像2%。

6.innodb支持的东西

根据实际情况选择存储引擎。

在一般情况下,如果查询是比较推荐使用MyISAM。

如果你需要一个交易或外键,那么InnoDB可能是一个更好的方式去做。

MyISAM和InnoDB优化:

key_buffer_size -这对于MyISAM表是非常重要的,如果你只是使用MyISAM表,你可以将它设置为可用内存的30-40%。合理的价值取决于索引的大小,数据量和负荷。记住,MyISAM表会使用操作系统的缓存来缓存数据,所以我们需要给他们留下一些记忆。在许多情况下,数据是比指数大得多。然而,它始终是必要的检查是否所有的key_buffer使用。.MYI文件是1GB,而key_buffer为4GB,这样做太浪费。如果你很少使用MyISAM表,那么你将key_buffer_size下面16-32mb适合盘临时表的索引。

innodb_buffer_pool_size -这对于InnoDB表是非常重要的。InnoDB比MyISAM table.myisam可以运行默认设置下key_buffer_size缓冲更敏感,但是InnoDB是默认设置下的innodb_buffer_pool_size蜗牛。因为InnoDB的缓存数据和索引,它不需要留太多的内存,操作系统,所以,如果你只需要设置,你可以设置它的70-80%的可用内存。如果你有一定量的数据应用到key_buffer规则,不潮,所以不需要在innodb_additional_pool_size性能-这个选项太多影响,至少在操作系统几乎足够的内存分配器。但如果你还想设置为20MB(或大GER),你需要看多少其他的记忆,InnoDB需要分配。



innodb_log_file_size是重要的在高的情况下写的负荷,特别是大型数据集。价值越高,更高的性能,但它注意到复苏的时间可能会增加重要。我经常把它64-512mb,不同服务器的大小。



innodb_log_buffer_size默认设置可在中等强度负荷的情况下写短的交易。如果更新操作或负载峰值较大,则应考虑增加它的价值。如果它的值设置太高了,可能会浪费内存将被刷新一次,所以有没有需要超过一秒设置内存空间。通常8-16mb是不够的。系统更小,更小的它的价值。



1000次是innodb_flush_logs_at_trx_commit InnoDB比MyISAM和大头的慢一点吗你似乎忘了修改这个参数的默认值是1,这意味着每一个更新事务(或每一次交易表外刷新到磁盘上,)这是相当耗费资源的,特别是当没有电池备份缓存。许多应用程序,尤其是那些由MyISAM,确定其价值2,就是他们没有刷新日志到磁盘,但刷新到操作系统的缓存,日志仍然会刷新每秒磁盘,所以它通常不会失去每秒1-2更新消费。如果你将它设置为0,它的速度更快,但这是相对不安全的-一个MySQL服务器会失去一些交易,当它崩溃。设置为2命令,部分丢失到操作系统缓存。



table_cache -打开一个表可能是非常昂贵的开销。例如,MyISAM使用的是MYI文件头的表正在使用中。你不需要这种操作太频繁,所以通常你需要增加缓存,它是足够的缓存打开的表最大。它需要使用的资源和操作系统的内存,它肯定不是一个问题,对当前的硬件配置,如果你有超过200个表,然后将其设置为1024可能是更合适的(每个线程都需要打开表)。如果连接号是大的,增加它的值。我看到了一个设置为100000的情况。



thread_cache --创建和销毁线程的代价可能是昂贵的,因为连接/断开每个线程是必需的。我通常设置为至少16。如果有很多,threads_created应用价值的跳跃和并发连接的是更大的,然后我会增加它的价值。其目的是在通常的操作创建新线程。



query_cache --它是有用的如果您的应用程序的大量阅读和没有应用级缓存。不要设置太大,因为它需要大量的开销来维护它,这会导致MySQL慢下来。它通常设置为32-512mb.after设置,最好是跟踪一段时间看它是否工作良好。一定的负载压力下,如果缓存命中率太低了,就启用。



sort_buffer_size -如果你只有一些简单的查询,那么就不需要增加它的价值,即使你有64GB的内存性能差,可能会降低性能。

MySQL数据库的优化方法:

1, select the most suitable field properties, as far as possible to reduce the length of the definition field, as far as possible to set the field NOT NULL, such as' Province, sex ', preferably set to ENUM

2、用子查询加入

3,使用工会(工会)取代人工创建的临时表

4,事务处理(保证数据完整性,例如添加和修改,都执行,一次失败)。

5,建立适当的索引(如何建立索引指数的优缺点

6,优化SQL语句

7,说明可以看到mysql的执行计划

8,子表(垂直子表,水平表)

以上是本文的全部内容,希望大家能喜欢。