MySQL的MyISAM与INNODB对比

本文探讨了MySQL中InnoDB和MyISAM两种存储引擎在执行效率上的显著差异,通过创建并操作类似的表结构,展示了在特定操作下InnoDB与MyISAM的执行时间相差悬殊。问题的关键在于InnoDB的参数`innodb_flush_log_at_trx_commit`,该参数对事务日志处理方式的影响导致了性能上的不同。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

我有两张数据结果完全一样的表,但引擎不相同,一个是InnoDB,一个是MyISAM

表结果如下:

CREATE TABLE `innodb_test` (
  `id` int(11) unsigned NOT NULL AUTO_INCREMENT,
  `name` varchar(128) DEFAULT '',
  `age` tinyint(3) unsigned DEFAULT '0',
  `updateon` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
  `createon` timestamp NOT NULL DEFAULT '0000-00-00 00:00:00',
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8 


CREATE TABLE `innodb_test` (

  `id` int(11) unsigned NOT NULL AUTO_INCREMENT,
  `name` varchar(128) DEFAULT '',
  `age` tinyint(3) unsigned DEFAULT '0',
  `updateon` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
  `createon` timestamp NOT NULL DEFAULT '0000-00-00 00:00:00',
  PRIMARY KEY (`id`)
) ENGINE=MyISAM AUTO_INCREMENT=1 DEFAULT CHARSET=utf8 


<?php

        $pdo = new PDO('mysql:host=localhost;port=3306;dbname=test', 'root', 'xxxxx');

        $start = microtime(true);
        $now = date('Y-m-d H:i:s');
        $table_name = 'innodb_test';
        for($i = 1; $i < 10000; $i++ ) {
                $name = 'A'.$i;
                $age = rand(1,100);
                $sql = "INSERT INTO `$table_name` (`name`,`age`,`updateon`,`createon`) values ('$name',$age,'$now','$now')";
                $pdo->exec($sql);
        }
        $end = microtime(true);
        echo "start=$start  end=$end,  total=" . $end-$start;


InnoDB执行结果:1446018429.6891-1446018535.7919=106.10283517838

MyISAM执行结果:1446018647.4344-1446018648.7329=1.298492193222


很惊讶,居然相差那么大!!经过多次验证,还是如此。。。疑问!

原来,这涉及到innodb的参数配置 innodb_flush_log_at_trx_commit。

关于innodb_flush_log_at_trx_commit配置,请看Innodb参数innodb_flush_log_at_trx_commit详解

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值