版权声明:欢迎转载,请注明沉默王二原创。 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
学而不思则罔,思而不学则殆!

mysql之修改表引擎相关推荐

  1. mysql 修改表 引擎,mysql如何修改表类型(表引擎)

    参考阅读:http://www.manongjc.com/article/1205.html 最近遇到一个修改 MySQL 表类型的问题,以前在 phpmyadmin 管理 mysql 数据库时,建立 ...

  2. MYSQL的修改表结构SQL语句

    MYSQL的修改表结构SQL语句: -- 查看创表语句 SHOW CREATE TABLE t_login; -- 查看表结构 desc t_login1; -- 增加列 ALTER TABLE t_ ...

  3. mysql批量修改表名前缀

    mysql中修改表名前缀的语句为:alert table 旧表名 rename to 新表名: mysql没有直接批量修改表名的方法,但是我们可以通过批量生成修改语句来达到批量修改表名的效果. 代码: ...

  4. MySQL 批量修改表名

    MySQL 批量修改表名 1.执行查询SQL 2.执行修改SQL 功能: 将数据库 jeecg-boot 中的表名前缀是 ACT_ 开头的表名替换为 CAMUNDA_ACT_ 1.执行查询SQL -- ...

  5. mysql批量修改表名、删除表

    mysql批量修改表名 第一步:得到所有需要修改的表名和对于得修改表名语句 SELECT CONCAT( 'ALTER TABLE ', table_name, ' RENAME TO ', REPL ...

  6. MySQL如何修改表的储存方式_修改mysql默认存储引擎的方法

    修改mysql默认存储引擎的方法,供大家学习参考. 先来了解一下mysql存储引擎: mysql服务器采用了模块化风格,各部分之间保持相对独立,尤其体现在存储架构上.存储引擎负责管理数据存储,以及my ...

  7. mysql在线修改表结构大数据表的风险与解决办法归纳

    整理这篇文章的缘由: 互联网应用会频繁加功能,修改需求.那么表结构也会经常修改,加字段,加索引.在线直接在生产环境的表中修改表结构,对用户使用网站是有影响. 以前我一直为这个问题头痛.当然那个时候不需 ...

  8. MySQL查看修改存储引擎总结

    本文总结了MySQL下查看.修改存储引擎的一些方法.测试.验证环境为MySQL 5.6 ,如有差异,请以实际版本为准 1:查看MySQL的存储引擎信息 1.1 使用show engines命令. Su ...

  9. Mysql之修改表结构

    mysql 修改表结构,字段等信息 一.查看表信息 1:查看建表语句 show create table test_a; 2:查看表字段信息 DESC test_a; 二.建表语句 CREATE TA ...

最新文章

  1. C++中的explicitkeyword
  2. jquery中如何以逗号分割字符串_百度知道
  3. 企业选择网站建设能够对自身带来哪些作用?
  4. python需要php吗-C、C+、Java、PHP、Python分别用来开发什么?
  5. python图片处理裁剪大小、旋转、镜像
  6. #研发解决方案#数据移山:接入、迁移、同步一站式
  7. 概率论-2.4 常用离散分布(待补充期望方差证明)
  8. #189 stat(动态规划)
  9. 使用ASP.NET AJAX Control Toolkit中的NoBot控件拒绝垃圾发布程序 【转载】
  10. win7下部署docker教程(三步搞定)
  11. 牛客网——Java刷题篇
  12. 研发主管接私活被辞退,法院判决公司赔偿20.7万元
  13. 魔兽世界私服架设 服务器架设简易教程
  14. 推荐一个可以连gmail的邮箱
  15. c语言.jpg图片转成数组_如何把PDF图片转成JPG?两个方法快速搞定PDF转图片!
  16. ZZULIOJ:1001植树问题
  17. 二叉树(Binary Tree,BT)的概念和性质
  18. vue 什么是渐进式 响应式 意思。Vue常用的指令。VUE:跨域设置。vue router 新窗口。$router.push。
  19. Java小游戏------飞翔的小鸟
  20. K - Period(周期)

热门文章

  1. postgresql 远程用户_liunx环境下安装PostgresSQL,开启远程连接
  2. 从oracle中读取图片,Pb从oracle中读取和保存图片
  3. python getostime_python中sys,os,time模块的使用(包括时间格式的各种转换)
  4. mysql金库模式_Python vault-anyconfig包_程序模块 - PyPI - Python中文网
  5. 小程序内容审核违规过滤,在小程序使用security.msgSecCheck
  6. OC 的反射机制以及使用场景
  7. swif 在字符串中查找特定字符索引以及改变字符串的指定位置的颜色 字体大小
  8. Eureka服务注册中心
  9. cacti监控linux和windows磁盘IO
  10. spring @component的作用