mysql详细笔记(MySQL的内存表的基础学习教程)
mysql详细笔记
MySQL的内存表的基础学习教程内存表,就是放在内存中的表,所使用内存的大小可通过My.cnf中的max_heap_table_size指定,如max_heap_table_size=1024M,内存表与临时表并不相同,临时表也是存放在内存中,临时表最大所需内存需要通过tmp_table_size = 128M设定。当数据超过临时表的最大值设定时,自动转为磁盘表,此时因需要进行IO操作,性能会大大下降,而内存表不会,内存表满后,会提示数据满错误。
临时表和内存表都可以人工创建,但临时表更多的作用是系统自己创建后,组织数据以提升性能,如子查询,临时表在多个连接之间不能共享。这里只讨论内存表
创建表是,用engine=heap可创建(mysql5.5中已经不支持type,以后都用engine,形成习惯)。
|
create table test ( id int unsigned not null auto_increment primary key , state char (10), type char (20), date char (30) )ENGINE=MEMORY DEFAULT CHARSET=utf8; |
内存表的特性
1.对于varchar等变长类型,内存表使用固定的长度来存放;
2.内存表可以有非唯一键;
3.内存表不能包含BLOB或者TEXT列;
4.内存表支持AUTO_INCREMENT列;
5.内存表支持插入延迟,使读取优先;
6.非临时内存表和其它非内存表一样在所有客户端直接共享;
我们使用内存表的时候,需要注意以下几个方面:
1.服务器内存足够大;
2.我们创建的内存表和MySQL内部临时表有所不同:
内存表的数据存放在内存中,而内部临时表(我们的query语句产生的)在恰当的时候存放在内存中,当内部临时表变得很大时,MySQL会自动地把它转化为 在磁盘上存储的表,而我们创建的内存表,却不会自动转换。
3.当我们单独地delete from 某个内存表的时候,不会回收内存;只有当整个表被delete的时候,才会回收内存;
4.在MySQL的主从服务器上,内存表可以被复制
内存表的一些使用限制
MySQL内存表使用哈希散列索引把数据保存在内存中,因此具有极快的速度,适合缓存中小型数据库,但是使用上受到一些限制。
1、heap对所有用户的连接是可见的,这使得它非常适合做缓存。
2、仅适合使用的场合。heap不允许使用xxxTEXT和xxxBLOB数据类型;只允许使用=和<=>操作符来搜索记录(不允许& lt;、>、<=或>=);不支持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`); |
- mysql order by id查询变慢(MySQL不使用order by实现排名的三种思路总结)
- 阿里云mysql配置升级注意事项(详解如何在阿里云上安装mysql)
- 忘记mysql密码怎么登录(Mysql用户忘记密码及密码过期问题的处理方法)
- MYSQL字符集设置的方法详解(终端的字符集)(MYSQL字符集设置的方法详解终端的字符集)
- mysqldump属于哪种备份(MySQLDump的备份小技巧)
- mysql mvcc 流程(Mysql MVCC机制原理详解)
- mysql mvcc 底层原理(浅析MySQL - MVCC)
- mysql将字符串转换为日期的函数(Mysql中时间戳转为Date的方法示例)
- mysql密码设置(mysql密码中有特殊字符&在命令行下登录的操作)
- mysql索引的弊端(MySQL 全文索引的原理与缺陷)
- 阿里云ecs服务器数据在哪儿(阿里云ECS云服务器linux系统安装mysql后远程连接不了踩坑)
- mysql 主从配置详解(MySQL 8.0.15配置MGR单主多从的方法)
- mysql按端口查找配置(MySQL中给定父行找到所有子行的解决方案)
- php实现redis核心代码(PHP结合Redis+MySQL实现冷热数据交换应用案例详解)
- mysql必背知识点高级(MySQL 8.0 Online DDL快速加列的相关总结)
- mysql存储过程遍历数据(Mysql 存储过程中使用游标循环读取临时表)
- 全椒人在苏州10周年联谊会在苏州举办(全椒人在苏州10周年联谊会在苏州举办)
- 这个全椒人被通报表彰,看看你认识吗(这个全椒人被通报表彰)
- 全椒人,38年集体回忆 1980-2018 ,看完不要哭(全椒人38年集体回忆)
- 董元奔吟咏历代文人 1012新旧均可 全椒人张璪 1022 -1093(董元奔吟咏历代文人)
- 泪目 这位 刷屏 的英雄,是全椒人的骄傲(泪目这位刷屏)
- 人从众 火炎焱 全椒再现 正月十六走太平 的魅力(人从众火炎焱全椒再现)
热门推荐
- css怎么让div整体居中(CSS实现DIV居中的三种方法)
- mysql查询慢有哪些原因(MySQL 查询速度慢的原因)
- python如何将xls转成xlsx(Python这样操作能存储100多万行的xlsx文件)
- laravel授权使用方法(Laravel 自带的Auth验证登录方法)
- Sql Server中的Null值
- mysql整体架构设计(MySQL 整体架构介绍)
- python外部如何调嵌套函数(python中嵌套函数的实操步骤)
- python itchat库介绍(Python利用itchat库向好友或者公众号发消息的实例)
- docker的启动的绝对命令(在docker中开启sshd操作)
- sql server占cpu高
排行榜
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9