• 了解MyISAM存储引擎


      由于目前接触到的客户还在使用MyISAM存储引擎,所以抽空看了一下MyISAM存储引擎的一些知识。

      由于在2010年MySQL默认的存储引擎已经是Innodb存储引擎了,所以一直是深入了解的是InnoDB相关的知识。

      结论一:MyISAM存储引擎默认SELECT语句会在表级别加一个共享读锁(table read lock)。

      结论二:MyISAM存储引擎表会优先执行DML语句,即使是先接受到SELECT语句。

    如何验证上述两个结论?

        验证方案:因为MyISAM引擎表不支持事务,所以我们不能像InnoDB表一样开启一个事务,来查看当前有哪些锁。所以通过模拟并发的操作,第一个session做select操作,第二个session做更新操作,第三个session执行show full processlist;查看语句当前执行的状态。

        验证步骤:

            1、首先插入2千万行的数据到myisam表中。

            2、然后打开三个MySQL连接窗口,并准备好下面的语句。第一个session查询某一个值;第二个session执行更新操作,更新所有的行;第三个执行show full processlist;

            3、然后依次执行三个窗口的SQL语句。

    通过上述两个结论我们可以得出以下几条结论

      结论三:MyISAM可以用于非事务性数据系统,可以接受宕机导致数据丢失、并且只有读操作的场景,并不适用于读多写少的场景。因为我们上面看到了读写是互斥的,这在InnoDB存储引擎是不会发生的,InnoDB通过行多版本并发控制很好的解决了读写互斥的问题,并且保证在读取时,读取到的是已经提交了的数据。

      

  • 相关阅读:
    unity3d工具栏介绍
    初识unity3d
    js模拟表单提交
    配置Appium环境
    html单选框 bootstrap模态框里面的单选框 和jq取值
    解决输入框总被浏览器记住的记录遮挡住的问题
    U盘
    python 字典列表/列表套字典 去重重复的字典数据
    ajax把数据return出去
    js把列表转换成字符串
  • 原文地址:https://www.cnblogs.com/li-guanhua/p/13326477.html
Copyright © 2020-2023  润新知