`
亚当爱上java
  • 浏览: 706062 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

MYSQL 内存表的使用总结

阅读更多

内存表使用哈希散列索引把数据保存在内存中,因此具有极快的速度,适合缓存中小型数据库。
官方手册对内存表有以下的一些解释:
The MEMORY storage engine creates tables with contents that are stored in memory. Formerly, these were known as HEAP tables. MEMORY is the preferred term, although HEAP remains supported for backward compatibility.

Each MEMORY table is associated with one disk file. The filename begins with the table name and has an extension of .frm to indicate that it stores the table definition.
1、heap对所有用户的连接是可见的,这使得它非常适合做缓存。
2、仅适合使用的场合。heap不允许使用xxxTEXT和xxxBLOB数据类型;只允许使用=和<=>操作符来搜索记录(不允许& amp; lt;、>、<=或>=);mysql4.1版本之前不支持auto_increment;只允许对非空数据列进行索引(not null)。
注:操作符 “<=>” 说明:NULL-safe equal.这个操作符和“=”操作符执行相同的比较操作,不过在两个操作码均为NULL时,其所得值为1而不为NULL,而当一个操作码为NULL时,其所得值为0而不为NULL。
3、一旦服务器重启,所有heap表数据丢失,但是heap表结构仍然存在,因为heap表结构是存放在实际数据库路径下的,不会自动删除。重启之后,heap将被清空,这时候对heap的查询结果都是空的。
4、如果heap是复制的某数据表(创建普通用户表这些也会丢失),则复制之后所有主键、索引、自增等格式将不复存在,需要重新添加主键和索引,如果需要的话。
5、对于重启造成的数据丢失,有以下的解决办法:
 a、在任何查询之前,执行一次简单的查询,判断heap表是否存在数据,如果不存在,则把数据重新写入,或者DROP表重新复制某张表。这需要多做一次查询。不过可以写成include文件,在需要用该heap表的页面随时调用,比较方便。
 b、对于需要该heap表的页面,在该页面第一次且仅在第一次查询该表时,对数据集结果进行判断,如果结果为空,则需要重新写入数据。这样可以节省一次查询。
 c、更好的办法是在mysql每次重新启动时自动写入数据到heap,但是需要配置服务器,过程比较复杂,通用性受到限制。

6、一些预期可能用到的sql语句
//如果表存在,则删除
DROP TABLE IF EXISTS `abc`;
//复制整张表xyz为heap表abc(包含所有数据)
CREATE TABLE `abc` type=heap select * from `xyz`;
//添加主键id
ALTER TABLE `abc` ADD PRIMARY KEY (`id`);
//添加索引username
ALTER TABLE `abc` ADD INDEX `abc` (`username`);
7.建表实例
CREATE TABLE `DB` (
`id` int(11) default NULL,
`songname` varchar(255) NOT NULL default ”,
`singer` varchar(255) NOT NULL default ”,
KEY `songname` (`songname`,`singer`)
) TYPE=HEAP
建表时TABLE TYPE 选项也有
这个表结构就是建立了内存表。
注意:type=heap创建内存表的方式在5.2中将删除,支持的创建方式是最后加上engine=memory.
临时表和内存表的区别:
1)临时表的默认存储引擎是myisam,它的表结构和数据 都是存放在内存中的,当mysql断开连接后,就会将其都删除;
2)内存表的存储引擎是memory,它的表结构信息存放在磁盘中,数据 存放在内存中,当mysql断开连接后,数据会被清空,而表结构信息仍然存在。
另内存表存储引擎memory要比临时表存储引擎myisam快,具体还没有测试。
其它参考:
官方文档:As indicated by the name, MEMORY tables are stored in memory. They use hash indexes by default, which makes them very fast, and very useful for creating temporary tables. However, when the server shuts down, all rows stored in MEMORY tables are lost. The tables themselves continue to exist because their definitions are stored in .frm files on disk, but they are empty when the server restarts.


可以看出来MEMORY确实是very fast,and very useful for creating temporary tables .把临时表和内存表放在一起使用确实会快不少:create table tmp2(id int not null) engine memory;
内存表的建立还有一些限制条件:
MEMORY tables cannot contain BLOB or TEXT columns. HEAP不支持BLOB/TEXT列。
The server needs sufficient memory to maintain all MEMORY tables that are in use at the same time. 在同一时间需要足够的内存.
To free memory used by a MEMORY table when you no longer require its contents, you should execute DELETE or TRUNCATE TABLE, or remove the table altogether using DROP TABLE.为了释放内存,你应该执行DELETE FROM heap_table或DROP TABLE heap_table。
另外如何创建内存表?
    创建内存表非常的简单,只需注明 ENGINE= MEMORY 即可:
    CREATE TABLE `tablename` ( `columnName` varchar(256) NOT NUL) ENGINE=MEMORY DEFAULT CHARSET=utf-8 MAX_ROWS=100000000;

或 写成 TYPE=HEAP MAX_ROWS=100000000; 效果是一样的


注意:
    当内存表中的数据大于max_heap_table_size设定的容量大小时,mysql会转换超出的数据存储到磁盘上,因此这是性能就大打折扣了,所以我们还需要根据我们的实际情况调整max_heap_table_size,例如在.cnf文件中[mysqld]的下面加入:
        max_heap_table_size = 2048M
    另外在建表语句中还可以通过MAX_ROWS来控制表的记录数。

内存表使用哈希散列索引把数据保存在内存中,因此具有极快的速度,适合缓存中小型数据库,但是使用上受到一些限制,以下是蓝草使用的一些感受。


本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/champion2009/archive/2009/06/08/4251059.aspx
分享到:
评论

相关推荐

    MySQL8.0内存相关参数总结

    MySQL8.0内存相关参数是优化数据库性能的关键因素,它们决定了数据库如何管理和使用内存资源,以提高查询效率和系统稳定性。下面将详细解释几个重要的内存参数及其作用。 1. **innodb_buffer_pool_size**: 这是...

    【荐】mysql服务性能优化—my.cnf_my.ini配置说明详解(16G内存)

    本文档旨在详细介绍一套已在生产环境中经过验证、适用于16GB内存环境下的MySQL服务性能优化方案。通过对my.cnf/my.ini配置文件的各项关键参数进行中文注释与解析,帮助DBA及运维人员更好地理解每个配置项的作用及其...

    MySQL大表性能优化方案 和 MySQL高性能表设计规范

    总结来说,MySQL大表性能优化和高性能表设计规范是提升数据库TPS的关键。通过合理的表结构设计、索引优化、查询优化以及内存和存储管理,我们可以有效地应对大数据量带来的挑战,实现数据库的高效运行。在实践中,...

    2G内存的MYSQL数据库服务器优化

    ### 2G内存的MySQL数据库服务器优化 在IT行业中,对于资源有限的环境进行数据库优化是一项挑战性工作,尤其是在仅有2GB内存的情况下对MySQL数据库服务器进行优化。这种优化旨在提高性能的同时确保系统的稳定运行。 ...

    MySql减少内存占用的方法详解

    首先,了解MySQL内存使用的几个关键组件是必要的。其中包括: 1. **缓冲池(Buffer Pool)**:这是MySQL用来缓存表数据和索引的主要内存区域,以减少磁盘I/O。默认情况下,MySQL可能分配较大的内存空间来容纳缓冲池...

    MYSQL 临时表用法总结

    - **存储引擎选择**:根据数据量和查询性能需求,可以选择合适的存储引擎,如InnoDB或MyISAM,对于内存临时表则默认使用Memory引擎。 - **资源消耗**:尽管临时表可以提高性能,但如果过多或过大,也可能占用大量...

    MySQL优化中的内存计算公式

    本文将详细介绍MySQL内存计算公式及其背后的原理。 #### 二、MySQL内存计算公式 MySQL的内存消耗主要包括两大部分:静态内存消耗与动态内存消耗。其中,静态内存消耗是指由MySQL服务端自身所占用的固定内存部分;...

    mysql多表查询和EXISTS查询性能对比

    通常会涉及到服务器硬件配置(如CPU、内存)、操作系统版本、MySQL版本及其配置参数等因素。这些因素都会对最终的查询性能产生影响。 #### NOT IN 查询 NOT IN 是一种常见的排除条件查询方式,在多表关联查询中用于...

    MySQL学习资料知识点总结.doc

    MySQL是世界上最受欢迎的开源数据库管理系统之一,尤其在Java企业级应用中被广泛使用。它是一个关系型数据库管理系统,由MySQL AB公司开发,现在是Oracle公司的产品。MySQL以其开源、免费和可扩展性著称,提供了高效...

    android使用mysql的方法总结

    第二种方式是android直接连接数据库,这种方式非常耗手机内存,而且容易被反编译造成安全隐患,所以在实际项目中不推荐使用。 1.加载外部jar包 在Android工程中要使用jdbc的话,要导入jdbc的外部jar包,因为在Java的...

    mysql 千万数据表 t_order.zip

    定期监控数据库性能,如查询响应时间、CPU和内存使用情况,及时发现和解决问题。根据实际负载调整数据库配置,如增加缓冲池大小、优化线程池设置等。 八、备份与恢复策略 对于千万级别的数据,定期备份必不可少,以...

    MySQL内存使用的查看方式详解

    总结起来,监控MySQL内存使用是数据库管理的重要任务。通过`performance_schema`和`sys`库提供的工具,我们可以深入了解内存的分配和使用情况,进而做出明智的优化决策,确保数据库高效、稳定地运行。

    mysql 学习总结

    为了解决这个问题,可以使用如Redis这样的持久化内存数据库,或者设置MySQL内存表的自动持久化策略。 在实际应用中,合理地创建和使用索引,选择合适的存储引擎,以及理解不同数据库类型的特点,都是优化数据库性能...

    运维和mysql重点面试题总结详细总结

    以上只是对部分面试题的解析,运维和MySQL面试题涵盖的内容非常广泛,还涉及到服务器性能调优、监控工具的使用、网络安全、存储技术、数据库设计与优化等多个方面。对于面试者来说,扎实的技术基础、丰富的实践经验...

    mysql教程详细总结

    MySQL教程详细总结 引言 MySQL是一款开源、免费的关系型数据库管理系统,被广泛应用于Web应用程序中,因其高效、稳定和易用性而受到青睐。本教程将深入探讨MySQL的各个方面,帮助初学者和进阶者全面理解其核心概念...

    MySQL学习资料知识点总结.pdf

    ### MySQL学习资料知识点总结 #### 一、数据库基础概念及MySQL简介 - **数据库的重要性**: - 使用数据库存储数据可以实现数据的持久化存储,避免像内存那样数据易丢失的问题。 - 数据库提供了高效的查询机制,...

    mysql常用的笔记总结

    通过这些配置文件,你可以调整超过300个参数来定制MySQL服务器的行为,例如内存使用、日志记录和错误处理。 在Linux环境中,MySQL服务可以通过`service mysqld start`启动,`service mysqld stop`停止。而在Windows...

    记使用Oracle SQL Developer 迁移MySql 数据至 Oracle.docx

    总结来说,从MySQL到Oracle的数据迁移是一个涉及多个步骤的过程,需要正确配置和管理数据库环境,确保用户和表空间设置正确,并且使用像SQL Developer这样的工具来简化迁移。在迁移过程中遇到问题时,要逐一排查,如...

    高性能MySQL笔记-总结

    【高性能MySQL笔记-总结】 MySQL作为一款广泛应用的关系型数据库管理系统,因其开源、免费且性能卓越的特性,在互联网行业中被广泛采用。本笔记旨在系统性地介绍MySQL的基础知识、性能优化及实战案例,帮助读者深入...

Global site tag (gtag.js) - Google Analytics