专栏电商日志财经减肥爱情
投稿投诉
爱情常识
搭配分娩
减肥两性
孕期塑形
财经教案
论文美文
日志体育
养生学堂
电商科学
头戴业界
专栏星座
用品音乐

MySQL的Memory存储引擎还有意义吗?

  两个groupby语句都用了orderbynull,为什么使用内存临时表得到的语句结果里,0这个值在最后一行;而使用磁盘临时表得到的结果里,0这个值在第一行?内存表的数据组织结构示例表插入测试数据。分别查询mysqlselectfromt1;idc1122334455667788990010rowsinset(0。00sec)mysqlselectfromt2;idc0011223344556677889910rowsinset(0。00sec)
  可见:内存表的返回结果里面0在最后一行InnoDB表的返回结果里0在第一行主键索引的组织方式InnoDB表的数据就放在主键索引树:t2的数据组织主键索引上的值有序存储。执行select时,就会按照叶子节点从左到右扫描,所以0在第一行。Memory引擎的数据和索引是分开的:t1中的数据组织内存表的数据以数组存放,而主键id索引里,存的是每个数据的位置。主键id是hash索引,所以索引的key并非有序。
  在内存表中,执行select时,是全表扫描:顺序扫描该数组。因此,0就是最后一个被读到,并放入结果集的数据。
  所以InnoDB、Memory数据组织方式不同:InnoDB引擎把数据放在主键索引,其他索引上保存的是主键id。这种方式,我们称之为索引组织表(IndexOrganiziedTable)Memory引擎采用的是把数据单独存放,索引上保存数据位置的数据组织形式,我们称之为堆组织表(HeapOrganiziedTable)InnoDB表的数据总是有序存放的,而内存表数据按写入顺序存放当数据文件有空洞时,InnoDB表在插入新数据时,为保证有序性,只能在固定位置写入新值,内存表找到空位即可插入新值数据位置发生变化时,InnoDB表只需修改主键索引,而内存表要修改所有索引InnoDB表用主键索引查询时需走一次索引查找,用普通索引查询时,走两次索引查找。而内存表的所有索引的地位相同InnoDB支持变长数据类型,不同记录的长度可能不同;内存表不支持Blob、Text字段。即使定义了varchar(N),实际也当作char(N),即固定长度字符串,因此内存表的每行数据长度相同。
  由于内存表的这些特性,每个数据行被删除后,空出位置都可被接下来要插入的数据复用。比如,如果要在表t1中执行:
  可见,id10这行出现在id4之后,即原来id5这行数据位置。t1的这个主键索引是哈希索引,因此若执行范围查询:selectfromt1whereid5;
  用不上主键索引的,而走全表扫描。
  若要让内存表支持范围扫描,应该怎么办呢?hash索引和BTree索引
  内存表其实也支持BTree索引。在id列上创建一个BTree索引,SQL语句可以这么写:
  此时t1的数据组织形式:
  这就类似InnoDB的b树索引了。查询对比优化器选择BTree索引,返回结果:04forceindex主键id索引,id0这行在结果集末尾我们都觉得内存表优势是速度快,因为Memory引擎支持hash索引。更重要的原因是,内存表的所有数据都保存在内存,内存读写速度肯定比磁盘快。
  但仍然不推荐在生产环境上使用内存表,因为有如下严重问题:内存表的锁
  内存表不支持行锁,只支持表锁。因此,一张表只要有更新,就会堵住其他所有在这个表上的读写。
  这里的表锁和MDL锁不同,但都是表级锁。模拟内存表的表级锁
  sessionA的update语句要执行50s该语句执行期间sessionB的查询会进入锁等待状态sessionC的showprocesslist:mysqlshowprocesslist;IdUserHostdbCommandTimeStateInfo5eventschedulerlocalhostNULLDaemon390719WaitingonemptyqueueNULL41rootlocalhostcommonmistakesQuery8Usersleepupdatet1setidsleep(10)whereid147rootlocalhostcommonmistakesQuery4Waitingfortablelevellockselectfromt1whereid249rootlocalhost:56378commonmistakesSleep100NULL51rootlocalhostNULLQuery0startingshowprocesslist5rowsinset(0。00sec)
  表锁限制了并发访问。所以,内存表的锁粒度问题,决定了它在处理并发事务时,性能也不好。数据持久性
  数据放在内存中,是内存表优势,但也是劣势。数据库重启时,所有内存表会被清空。
  若数据库异常重启,内存表被清空也就清空了,好像也不会有啥问题呀!但在高可用架构下,内存表的这个特点就是个bug!
  MS架构下内存表的问题。MS基本架构业务正常访问主库备库由于xxx而重启,内存表t1内容被清空备库重启后,客户端发送一条update语句,修改t1的数据行,这时备库应用线程就会报错找不到要更新的行
  这就会导致主备同步停止。当然了,若此时发生主备切换,客户端会看到,t1的数据丢失了。在有proxy的架构,默认主备切换的逻辑由数据库系统自己维护。这样对客户端来说,就是网络断开,重连之后,发现内存表数据丢失了。
  这也还好呀,毕竟主备发生切换,连接会断开,业务端能够感知到异常!但接下来内存表会让现象更诡异。由于MySQL知道重启之后,会丢失内存表数据。所以,担心主库重启之后,出现主备不一致,MySQL会在数据库重启后,往binlog写一行DELETEFROMt1。此时若使用的双M架构:
  备库重启时,备库binlog里的delete语句就会传到主库,然后把主库内存表删除。这样你在使用时,就会发现主库的内存表数据突然被清空。
  综上,内存表不适合在生产环境使用。
  但内存表执行速度就是快呀?!若你的表更新量大,那么并发度是个重要指标,InnoDB支持行锁,并发度就是比内存表好能放到内存表的数据量都不大。若你考虑的是读性能,一个读QPS很高数据量不大的表,即使用InnoDB,数据也都会缓存在BufferPool,读性能也不会差!
  所以,推荐普通内存表都用InnoDB表替代。but!有个场景是例外:用户临时表,在数据量可控,不会耗费过多内存的情况下,你可以考虑使用内存表。
  内存临时表刚好可以无视内存表的两个不足,主要因为:临时表不会被其他线程访问,无并发问题临时表重启后也需要删除,不存在清空数据问题备库的临时表也不会影响主库的用户线程
  看看join语句优化案例,推荐创建一个InnoDB临时表,使用的语句序列是:createtemporarytabletempt(idintprimarykey,aint,bint,index(b))engineinnodb;insertintotemptselectfromt2whereb1andb2000;selectfromt1jointempton(t1。btempt。b);
  这里使用内存临时表的效果更好:使用内存表不需要写磁盘,往表tempt的写数据的速度更快索引b使用hash索引,查找的速度比BTree索引快临时表数据只有2000行,占用的内存有限
  因此,可以将临时表tempt改成内存临时表,并且在字段b上创建一个hash索引。createtemporarytabletempt(idintprimarykey,aint,bint,index(b))enginememory;insertintotemptselectfromt2whereb1andb2000;selectfromt1jointempton(t1。btempt。b);使用内存临时表的执行效果不论是导入数据的时间,还是执行join的时间,使用内存临时表的速度都比使用InnoDB临时表要快。

若不搬走三座大山,中国出生人口数量将在2056年被美国超越!联合国发布的2022年世界人口展望报告显示,2022年中国总和生育率只有1。175,排名世界倒数第五位,全球只剩4个国家的生育率比咱们还低圣马力诺安道尔新加坡韩国。2月17日育娲人美商海盗船复仇者系列4896GB套装上架单条2448GBDDR55600,2599元起售此前微星和技嘉先后宣布,旗下英特尔600700系列主板已支持单条容量为24GB和48GB的DDR5内存。这意味着内存容量将改变过往以2次幂递增的历史,配备4个DIMM的主板最大内存美国国务院发出最强警告墨西哥6州禁止旅行,25州被限制就在美国人收拾行李赶飞机打算去海滩和酒吧度春假时,近期美国国务院发出最强警告。对墨西哥6个州实施了禁止旅行限制,同时认为另外25个州值得重新考虑或采取极端预防措施的指定。其中旅游热金朝从盛世到灭亡,仅用了20多年的时间,为何衰落得如此之快?公元1115年,完颜阿骨打召集女真各部攻辽成功,并在如今的哈尔滨立国,国号定为大金。公元1127年,金国出兵灭掉北宋,发生了让无数国人悲愤的靖康之耻。但让人意想不到的是,如此来势汹郭台铭巴结美国背刺华为,把工厂迁越南屡遭停工,苹果也不要他这一切都是他咎由自取,他以后也不会有好下场的。二二年五月,上海一广场处,几位民众盯着着眼前的电子屏幕愤愤说道。只见电子屏幕中正播放着的,是富士康工作人员工作的场景,随后,富士康创始我国4种良心白酒,都是100纯粮酿造,多年不曾涨价,你都喝过吗你平时喜欢喝什么酒?涨过价吗?相信很多酒友都有这样的感慨,白酒价格都在小幅上涨,以前的口粮酒现在都快喝不起了。像很受欢迎的黄盖玻汾,从十多年前的20多一瓶,涨到现在的五六十,尽管涨南瓜全身都是宝,很多人不会做,试试这个新吃法,营养好吃又解馋南瓜全身都是宝,很多人不会做,试试这个新吃法,营养好吃又解馋。作为一个南瓜控,隔三差五就得买点回家吃,南瓜价格特别便宜,有时我会买上一两个回家堆着吃。烧南瓜,是我们家的心头好,有时大理菜市,一口一个春天!大理菜市场里有着整座城市最鲜活的烟火气息悄然春至春天的味道也早早来到菜市场里时令野菜陆续上市嫩绿鲜活春天的菜市场一片好春光野生藜蒿菜,我自己去摘的,12元一斤,趁新鲜买一点回去尝一饮品怎么选?你熟悉的它最健康1选购注意几多几少饮料,尤其是含糖饮料,过量饮用的确会对健康造成不利的影响。在选购饮料的时候一定要学会科学辨识,避免选择食品添加剂过多糖分过多的饮料。尽量选择碳水化合物(糖)含量较预计45月开放,金山人又多了个打卡的好去处!满江红忆江南临江仙,一个个古意盎然的宋词词牌被用作了房间名牌。最近,枫泾镇新义村新添一处传统文化研学基地,也为即将到来的踏春赏游增加了一个新选择。新义村居住着岳飞后人,这一调研收获尽享春光2月18日,市民在湖南省衡阳市南湖公园踏青游玩(无人机照片)。初春时节,不少市民利用周末出门休闲娱乐,尽情享受春光。新华社发(曹正平摄)2月18日,人们在浙江省余姚市四明湖畔梅花树
坐在星巴克里面,拿着笔记本电脑的那群人,到底是干什么工作的?我坦白了,我是星巴克员工,气氛组的装修设计师,干销售的,出差的,嫌家里吵的,失业假装上班的,做作业的,自由职业者星巴克气氛组10个里面有五个是气氛组的,一个是卖保险的,一个搞设计的为什么长期上涨的股票很少涨停?长线的牛股很少涨停,这个现象其实还是非常好解释的。主要原因有三点。1大部分的长线资金,并不急功近利,所以压根没有封板一说。长线的牛股,大部分是基金扎堆,险资云集,社保布局的个股。这股市或期市,到底需不需要去预测涨跌?今天是2022年第一天,向我的粉丝读者问好,祝愿大家股票账户长红,新的一年更上一层楼!期市我不懂,还是来说股市吧。股市盈利不是靠预测行情的胜率来获得的,因为行情没法预测!如果靠预测银行大额存单热销,储户为何对此情有独钟?大额存单热销,主要与当前宽松货币政策背景有关,银行利率较多年前不断下降,普通的定期存款利率虽然较基准利率也有上浮,但上浮力度不及大额存单,并且大额存单还有诸多优点,自然受到储户的青哪个银行的手机APP做得最好?看到大家的回复,小招就放心了,以后一定更多多进步努力,不辜负大家认可。手机银行好用的标准为1使用流畅,不会经常出现页面卡死的情况2页面布局合理,能很清楚很迅速找到需要找的地方3产品一路都是高速,300公里,为何导航预计时间却要5个多小时?导航上的数据只能作为参考,当车主确定起点和终点之后,导航会以这个路程计算出所需要的时间,同时会调用自身数据库,根据路况车速等各方面的因素,最终得出这个行驶的时间,相对来说比较保守。现在北京个人新能源指标排到什么时间了?不建议你改排,不划算啊,毕竟摇了好久了,去年我也想改来着,新能源直接排到8年后了。不过今年改成家庭摇号之后,我老公我俩家庭摇号排的新能源,50分以上,还没写孩子信息,排上了。如果你在合肥,想出去穷游一趟,可以自驾,时间可以长点,身体原因不能去海拔高的地方,有哪些地方可以推荐?对于自驾游来说,不建议穷游,且不说的确要用一定的花费保证尽可能走好路妥善停车加好油等,以保障安全行驶,纯粹的旅游本身就是一件花钱的事(除非是特殊工作要求),而且好不容易在路上了,就通达信手机客户端可以添加自己的股票公式吗?可以啊,我一直都是在用的通达信软件,手机电脑指标可以通用,这点还是比较方便的。对于指标的选择要慎重,有未来的指标,一点意义都没有。给大家直接说一下手机怎么导入指标,步骤不易,多多支如何用一句话证明你是青岛人?谢邀!不好意思!我无论如何也难用一句话来证明我是青岛人!因为我没居住在青岛,也从来没去过青岛,但我喝过青岛的啤酒,就是酒量太小,喝几口就会醉。哈哈!今天我也说一句话来考考各位!猜猜开柴油车是什么感受?整体而言,柴油车动力大,尤其是怠速时,怠速起步基本不用加油门,而汽油车会容易熄火,还有,柴油车提速慢,在换挡的时候不会有闯动的感觉。请关注容济点火器对维护保养来说柴油车比汽油车容易
友情链接:快好找快生活快百科快传网中准网文好找聚热点快软网