InnoDB和MyISAM是在使用MySQL最常用的两个表类型,各有优缺点,视具体应用而定。基本
的差别为:MyISAM类型不支持事务处理等高级处理,而InnoDB类型支持。MyISAM类型的表强调的是性能,其执行数度比InnoDB类型更快,
但是不提供事务支持,而InnoDB提供事务支持已经外部键等高级数据库功能。
MyIASM是IASM表的新版本,有如下扩展:
1、二进制层次的可移植性。
2、NULL列索引。
3、对变长行比ISAM表有更少的碎片。
4、支持大文件。
5、更好的索引压缩。
6、更好的键码统计分布。
7、更好和更快的auto_increment处理。
MyISAM优化:
主要参数
key_buffer_size
-
这对MyISAM表来说非常重要,是用来设置整个MySQL中常规Key Cache的大小。一般来说,如果MySQL运行在32位平台,此值建议不超过2GB,如果是64位平台上则不用考虑此限制,但也最好不要超过4GB。
合理的值取决于索引大小、数据量以及负载 --
记住,MyISAM表会使用操作系统的缓存来缓存数据,因此需要留出部分内存给它们,很多情况下数据比索引大多了。尽管如此,需要总是检查是否所有的
key_buffer 都被利用了 -- .MYI 文件只有 1GB,而 key_buffer 却设置为 4GB
的情况是非常少的。这么做太浪费了。如果你很少使用MyISAM表,那么也保留低于 16-32MB 的 key_buffer_size
以适应给予磁盘的临时表索引所需。
key_buffer_block_size
- 索引缓存中的Cache Block Size.
用来设置每个Cache Block的大小,实际上也同时限定了将".MYI"文件中的Index Block被读入时File Block的大小。
--次要参数
table_cache
--
打开一个表的开销可能很大。例如MyISAM把MYI文件头标志该表正在使用中。你肯定不希望这种操作太频繁,所以通常要加大缓存数量,使得足以最大限度
地缓存打开的表。它需要用到操作系统的资源以及内存,对当前的硬件配置来说当然不是什么问题了。如果你有200多个表的话,那么设置为 1024
也许比较合适(每个线程都需要打开表),如果连接数比较大那么就加大它的值。我曾经见过设置为 100,000 的情况。
thread_cache
-- 线程的创建和销毁的开销可能很大,因为每个线程的连接/断开都需要。我通常至少设置为 16。如果应用程序中有大量的跳跃并发连接并且 Threads_Created
的值也比较大,那么我就会加大它的值。它的目的是在通常的操作中无需创建新线程。
query_cache
--
如果你的应用程序有大量读,而且没有应用程序级别的缓存,那么这很有用。不要把它设置太大了,因为想要维护它也需要不少开销,这会导致MySQL变慢。通
常设置为 32-512Mb。设置完之后最好是跟踪一段时间,查看是否运行良好。在一定的负载压力下,如果缓存命中率太低了,就启用它。
sort_buffer_size
--如果你只有一些简单的查询,那么就无需增加它的值了,尽管你有 64GB 的内存。搞不好也许会降低性能。
与Key Cache相关的性能状态参数变量:
key_cache_division_limit
: 以百分比的形式将整个缓存区划分为多个区域。系统默认为100,即只有Warm Area
实际上,在MySQL的Key Cache中所使用的LRU算法并不像传统算法,仅仅是访问频率,以及最后访问时间,并通过唯一的链表实现,而是将其分成了两部分。
key_cache_age_threshold
:控制各区域中的何时被降级,值越小,越容易降级到下一级area中
表的扫描分为Sequential Scan和Radom Scan 2种方式,read_buffer_size设置sequential scan时使用的缓存,read_rnd_buffer_size设置radom scan时使用的缓存
Key_blocks_not_flushed:
键缓存内已经更改但还没有清空到硬盘上的键的数据块数量。
Key_blocks_unused
键缓存内未使用的块数量。你可以使用该值来确定使用了多少键缓存;参见5.3.3节,“服务器系统变量”中Key_buffer_size的讨论。
Key_blocks_used
键缓存内使用的块数量。该值为高水平线标记,说明已经同时最多使用了多少块。
Key_read_requests
从缓存读键的数据块的请求数。
Key_reads
从硬盘读取键的数据块的次数。如果Key_reads较大,则Key_buffer_size值可能太小。可以用
Key_reads/Key_read_requests计算缓存损失率。
Key_write_requests
将键的数据块写入缓存的请求数。
Key_writes
向硬盘写入将键的数据块的物理写操作的次数。
Last_query_cost
用查询优化器计算的最后编译的查询的总成本。用于对比同一查询的不同查询方案的成本。默认值0表示还没有编译查询。 默认值是0。Last_query_cost具有会话范围。
分享到:
相关推荐
MyISAM引擎是MySQL早期的默认存储引擎,以其高速度和轻量级而闻名。它不支持事务处理,这意味着在执行一系列操作时,如果其中一个操作失败,整个事务不会被回滚。这使得MyISAM适合于读取密集型的应用,例如数据分析...
### MySQL 数据库引擎 MyISAM 与 InnoDB 在 MySQL 数据库系统中,存在多种不同的存储引擎,其中最为人所熟知且广泛使用的两种是 MyISAM 和 InnoDB。这两种存储引擎各自具有独特的特点和适用场景。 #### InnoDB:...
##### 2、MyISAM引擎 - **基础描述**:MyISAM是MySQL早期版本的默认存储引擎,不支持事务处理和行级锁,但提供了全文索引支持。 - **特点描述**: - **锁表机制**:在读取数据时使用共享锁,在写入数据时使用...
在MySQL数据库系统中,MyISAM是一种非常常用的存储引擎。它以其高效性和简单的结构而在许多场景下得到广泛应用,尤其是在那些读取操作远多于写入操作的应用场景中。然而,当面对高并发的读写操作时,MyISAM的表现...
MyISAM引擎在处理数据时,根据字段类型的不同,会采用不同的存储策略。例如,如果表中有VARCHAR、TEXT或BLOB类型的字段,那么该表就会被存储为动态格式,这可能导致额外的存储开销,但能处理变长数据。 相比之下,...
本文实例讲述了mysql更改引擎(InnoDB,MyISAM)的方法,分享给大家供大家参考。具体实现方法如下: mysql默认的数据库引擎是MyISAM,不支持事务和外键,也可使用支持事务和外键的InnoDB。 查看当前数据库的所支持的...
MySQL中的MyISAM存储引擎是早期广泛使用的非事务性存储引擎,它提供了快速的查询性能,特别是对于读密集型的应用。然而,为了充分利用MyISAM并优化其性能,需要了解和调整一系列的系统变量和配置选项。以下是针对...
MySQL存储引擎优化主要聚焦在如何提升数据库性能,特别是针对MyISAM这种常用且历史悠久的存储引擎。MyISAM因其在读取密集型非事务处理应用中的出色表现和简易的维护方式,深受用户青睐。以下是对MyISAM存储引擎优化...
例如,对于一个以读写操作为主的微博系统,可以考虑使用MyISAM引擎,因为其对数据读取和插入操作的优化能够提供较好的性能。相反,对于需要保证数据完整性和一致性的财务系统,则更应该使用InnoDB引擎,其事务支持和...
MyISAM引擎以其快速的全文搜索、对表锁的高效管理以及对内存的高效利用而受到欢迎。然而,它的主要缺点是不支持事务处理和行级锁定,这在高并发读写场景下可能成为性能瓶颈。MyISAM的优化主要集中在以下几个方面: ...
这是因为MyISAM引擎优化了读取操作,能够快速地提供数据访问。 - **InnoDB**:对于复杂的INSERT和UPDATE操作表现更佳,尤其是在需要事务支持的场景下。尽管在某些读取密集型的应用场景下,其性能可能不如MyISAM,...
MyISAM是ISAM的增强版,是MySQL的默认引擎,提供更快的读取速度,支持更多的索引和字段管理,同时采用表级锁定机制优化并发读写。然而,MyISAM也需要定期运行`OPTIMIZE TABLE`命令来回收更新操作浪费的空间。 HEAP...
这些笔记涵盖了MySQL优化的主要方面,包括查询优化、SQL编写技巧、数据库设计、存储引擎选择、服务器配置、硬件升级、定期维护以及使用各种工具进行监控和调优。通过这些方法,你可以有效地提升MySQL数据库的运行...
- **存储引擎的选择**:不同的存储引擎适用于不同的应用场景,例如InnoDB支持事务处理,而MyISAM则更适合读密集型的应用。 #### 五、优化MySQL服务器 在服务器层面上进行优化同样至关重要,这包括但不限于内存配置...
MySQL系统由多个组件构成,包括管理工具、连接池、SQL接口、分析器、优化器、缓存、存储引擎和硬盘。其中,存储引擎是专门处理表数据的模块,不同类型的存储引擎决定了数据的存储格式、索引类型以及并发控制策略。 ...