mysql之修改表引擎

news/2024/7/5 1:46:52
版权声明:欢迎转载,请注明沉默王二原创。 https://blog.csdn.net/qing_gee/article/details/49817841

刚入门mysql的时候,对innodb引擎和myisam引擎没有很好的理解,所以表引擎用的基本上就是myisam,反正也不懂哪一个好,不过有人给我灌输“如果查询多的话,myisam比innodb要快得多”。现在想想当时是有多蠢!

场景

当时项目中有一张会员表,王二,也就是我,愚蠢的认为会员表相对来说,读频率要高于写频率,所以为了“性能”,果断的选择了myisam引擎。后来,后来项目正式上线后,就悲剧了,数据库经常发生死锁,弄得后来使用`kill来杀掉死锁的sql查询,现在回首往事,真是不堪啊!

果然,今天再次读《高性能mysql》中关于引擎简介一节时,才隐隐约约知道了什么,“王二,你个sb”,对,就是这样,我心里默默骂着自己。

不要轻信“myisam比innodb快”的经验之谈。

看吧,作者告诉你了,到底什么才是正确的。所以,“在没有特殊需求时,表选择innodb引擎”!

当然了,为了解决这个困扰了许久的问题,最后终于知道myisam是表级锁,这样在频繁的读写时,就会发生大量的读锁无法获取到资源。于是决定把myisam改为innodb引擎,当然在做这个过程时,依然非常可怕!

由于无知,王二,也就是我,直接通过navicat中进行了修改,当时看着navicat假死的状态,差点以为项目又要挂掉了,过了很久很久,才从奄奄一丝的状态恢复了元气。好吧,我当时吓得有点半死。

今天才知道了答案:

表在修改引擎时会花费大量时间。mysql会按行将数据从原表复制到一张新表中,在复制期间可能会消耗系统所有的IO能力,同时原表上回加上读锁。所以,在繁忙的表上执行此操作要特别小心。

解决方案

mysql> show table status like 'girl' \G
mysql> create table boy like girl;
mysql> show table status like 'boy' \G
mysql> alter table boy engine=innodb;
mysql> insert into boy select * from girl;
mysql> show table status like 'boy' \G
mysql> select * from boy;

原来是需要这样做的,先创建另外一张表,再将复制数据。

大数据量时

mysql> start transaction;
mysql> insert into boy select * from girl where id between 1 and 2;
mysql> commit;
mysql> select * from boy;

例子基本上都是书中给的,所以我不是我原创的,给自己积累一点知识。


相关文章

  • mysql之死锁

写在最后

那么人生何处不爬虫,爬虫请标http://blog.csdn.net/qing_gee
学而不思则罔,思而不学则殆!


http://lihuaxi.xjx100.cn/news/245773.html

相关文章

Unix_Linux系统定时器的应用(案例)

2014-05-05 Created By BaoXinjian 一、摘要 关于任务定时的命令crontab,在Linux中应用还算常见,这次为了配合开发完成一些辅助功能,以及一些备份更新等脚本,就需要crontab来完成,在windows下也就是一个批处理&#xf…

约瑟夫环 猴子选大王

<? /*** 猴子选大王&#xff1a;一群猴子排成一圈&#xff0c;按1,2,…,n依次编号。* 然后从第1只开始数&#xff0c;数到第m只,把它踢出圈&#xff0c;从它后面再开始数&#xff0c;再数到第m只&#xff0c;在把它踢出去…&#xff0c;* 如此不停的进行下去&#xff0c;直…

linux修改mysql密码sa_数据库sa初始密码

SQL Server之备份和还原系统数据库系统数据库是管理和维护SQL Server所必须的数据库&#xff0c;对服务器实例的运行至关重要。每次进行大量更新后必须备份多个系统数据库&#xff0c;包括master、model、msdb&#xff0c;备份这些系统数据库&#xff0c;就可以在发生系统故障(…

[Java基础] Java如何实现条件编译

条件编译绝对是一个好东西。如在C或CPP中&#xff0c;可以通过预处理语句来实现条件编译。但是在JAVA中却没有预处理&#xff0c;宏定义这些东西&#xff0c;而有时在一些项目中&#xff0c;我们又需要条件编译。那么&#xff0c;在JAVA中&#xff0c;该如何实现条件编译呢&…

《Programming WPF》翻译 第7章 3.笔刷和钢笔

原文:《Programming WPF》翻译 第7章 3.笔刷和钢笔为了在屏幕上绘制一个图形&#xff0c;WPF需要知道你想要为图形填充什么颜色以及如何绘制它的边框。WPF提供了一些Brush类型支持各种绘图样式。Pen类增加这些笔刷以提供边框的厚度和样子。 在这一章&#xff0c;我们将要看一下…

mysql innodb引擎丢失_【MySQL】InnoDB引擎ibdata文件损坏/删除后使用frm和ibd文件恢复数据...

注意&#xff01;此方法只适用于innodb_file_per_table独立表空间的InnoDB实例。此种方法可以恢复ibdata文件被误删、被恶意修改&#xff0c;没有从库和备份数据的情况下的数据恢复&#xff0c;不能保证数据库所有表数据的100%恢复&#xff0c;目的是尽可能多的恢复。恢复数据前…

JXJJOI2018_T1_market

题目描述 某天Lemon去超市买柠檬&#xff0c;他发现货架上有N个柠檬&#xff0c;每个柠檬都有一个重量Wi和价格Ci。 Lemon身上只带了S元钱&#xff0c;因此他想要买一个价格不超过S的柠檬回家&#xff0c;另外&#xff0c;他希望他买的那个柠檬的性价比尽量高。 性价比的定义是…

【转】ubuntu 12.04 下 Vim 插件 YouCompleteMe 的安装

原文网址&#xff1a;http://www.cnblogs.com/jostree/p/4137402.html 作者&#xff1a;jostree 转载请注明出处 http://www.cnblogs.com/jostree/p/4137402.html 1.需要保证vim的版本大于7.3.584&#xff0c;否则的话需要更新vim 可以通过第三方源更新&#xff1a; 在终端输入…