位置: 编程技术 - 正文

MySQL两种表存储结构MyISAM和InnoDB的性能比较测试(mysql两张表差异数据)

编辑:rootadmin
MySQL支持的两种主要表存储格式MyISAM,InnoDB,上个月做个项目时,先使用了InnoDB,结果速度特别慢,1秒钟只能插入几条。后来换成MyISAM格式,一秒钟插入上万条。当时决定这两个表的性能也差别太大了吧。后来自己推测,不应该差别这么慢,估计是写的插入语句有问题,决定做个测试:测试环境:Redhat Linux9,4CPU,内存2G,MySQL版本为4.1.6-gamma-standard测试程序:Python+Python-MySQL模块。测试方案:1、MyISAM格式分别测试,事务和不用事务两种情况:2、InnoDB格式分别测试AutoCommit=1(不用begin transaction和用begin transaction模式), AutoCommit=0 (不用begin transaction和用begin transaction模式)四种情况。测试方法为插入条记录。为了测试不互相影响,单独建立了专用的测试表,建表语句如下:1、MyISAM不用事务表:CREATE TABLE `MyISAM_NT` ( `TableId` int() NOT NULL default '0', `TableString` varchar() NOT NULL default '') ENGINE=MyISAM;2、MyISAM用事务表:CREATE TABLE `MyISAM_TS` ( `TableId` int() NOT NULL default '0', `TableString` varchar() NOT NULL default '') ENGINE=MyISAM;3、InnoDB关闭AutoCommit,不用事务:CREATE TABLE `INNODB_NA_NB` ( `TableId` int() NOT NULL default '0', `TableString` varchar() NOT NULL default '') ENGINE=InnoDB;4、InnoDB关闭AutoCommit,用事务:CREATE TABLE `INNODB_NA_BE` ( `TableId` int() NOT NULL default '0', `TableString` varchar() NOT NULL default '') ENGINE=InnoDB;5、InnoDB开启AutoCommit,不用事务:CREATE TABLE `INNODB_AU_NB` ( `TableId` int() NOT NULL default '0', `TableString` varchar() NOT NULL default '') ENGINE=InnoDB;6、InnoDB开启AutoCommit,用事务:CREATE TABLE `INNODB_AU_BE` ( `TableId` int() NOT NULL default '0', `TableString` varchar() NOT NULL default '') ENGINE=InnoDB;测试的Python脚本如下:#!/usr/bin/env Python'''MyISAM,InnoDB性能比较作者:空心菜(Invalid)时间:--'''import MySQLdb import sysimport osimport stringimport timec = Nonetesttables = [("MyISAM_NT",None,0), ("MyISAM_TS",None,1), ("INNODB_NA_NB",0,0), ("INNODB_NA_BE",0,1), ("INNODB_AU_NB",1,0), ("INNODB_AU_BE",1,1) ]def BeginTrans(): print "ExecSQL:BEGIN;" c.execute("BEGIN;") returndef Commit(): print "ExecSQL:COMMIT;" c.execute("COMMIT;") returndef AutoCommit(flag): print "ExecSQL:Set AUTOCOMMIT = "+str(flag) c.execute("Set AUTOCOMMIT = "+str(flag)) returndef getcount(table): #print "ExecSQL:select count(*) from "+table c.execute("select count(*) from "+table) return c.fetchall()[0][0] def AddTable (Table,TableId,TableString): sql = "INSERT INTO "+Table+"(TableId, TableString) VALUES( "+ TableId+ ",'" + TableString +"')" try: c.execute(sql) except MySQLdb.OperationalError,error: print "AddTable Error:",error return -1; return c.rowcountdef main(): argv = sys.argv if len(argv) < 2: print 'Usage:',argv[0],' TableId TestCount n' sys.exit(1) global c #mysql访问cursor db_host = "localhost" db_name = "demo" db_user = "root" db_user_passwd = "" print "Config:[%s %s/%s %s] DBn"%(db_host,db_user,db_user_passwd,db_name) if len(argv) > 2: tableid = argv[1] testcount = int(argv[2]) # for test in testtables: #每次操作前都重写建立数据库连接 try: mdb = MySQLdb.connect(db_host, db_user, db_user_passwd, db_name) except MySQLDb.OperationalError,error: print "Connect Mysql[%s %s/%s %s] DB Error:"%(db_host,db_user,db_user_passwd,db_name),error,"n" sys.exit(1) else: c = mdb.cursor() table,autocommit,trans = test starttime = time.time() print table," ",time.strftime("%y-%m-%d %H:%M:%S",time.localtime()) if autocommit != None: AutoCommit(autocommit) if trans == 1: BeginTrans() for i in xrange(testcount): tablestring = "%d"%i if (AddTable(table,tableid,tablestring)<1): print "AddTable Error",tablestring if trans == 1: Commit() print time.strftime("%y-%m-%d %H:%M:%S",time.localtime()) endtime = time.time() usedtime = endtime-starttime print table,"count:",getcount(table)," used time:",usedtime c.close() mdb.close()if __name__ == '__main__': main()测试结果如下:Config:[localhost root/ demo] DBMyISAM_NT -- ::-- ::MyISAM_NT count: used time: 2.MyISAM_TS -- ::ExecSQL:BEGIN;ExecSQL:COMMIT;-- ::MyISAM_TS count: used time: 2.INNODB_NA_NB -- ::ExecSQL:Set AUTOCOMMIT = -- ::INNODB_NA_NB count: used time: 2.INNODB_NA_BE -- ::ExecSQL:Set AUTOCOMMIT = 0ExecSQL:BEGIN;ExecSQL:COMMIT;-- ::INNODB_NA_BE count: used time: 3.INNODB_AU_NB -- ::ExecSQL:Set AUTOCOMMIT = -- ::INNODB_AU_NB count: used time: .INNODB_AU_BE -- ::ExecSQL:Set AUTOCOMMIT = 1ExecSQL:BEGIN;ExecSQL:COMMIT;-- ::INNODB_AU_BE count: used time: 3.结论:由此得知影响速度的主要原因是AUTOCOMMIT默认设置是打开的,我当时的程序没有显式调用BEGIN;开始事务,导致每插入一条都自动Commit,严重影响了速度。算来也是个低级错误!相关参考:

推荐整理分享MySQL两种表存储结构MyISAM和InnoDB的性能比较测试(mysql两张表差异数据),希望有所帮助,仅作参考,欢迎阅读内容。

MySQL两种表存储结构MyISAM和InnoDB的性能比较测试(mysql两张表差异数据)

文章相关热门搜索词:mysql两张表连接,mysql两张表差异数据,mysql两个表,mysql两个表连接,mysql中两张表如何建立连接,mysql from两个表,mysql两张表差异数据,mysql两个表,内容如对您有帮助,希望把文章链接给更多的朋友!

GROUP_CONCAT的用法 GROUP_CONCAT今天工作需要,要用到groupby等等,查看手册,没想到发现了GROUP_CONCAT这个好东西,一下在省掉了我很多工作,这个函数在MySQL4.1中被加入。函

MYSQL的select 学习笔记 记录一些select的技巧:1、select语句可以用回车分隔$sql="select*fromarticlewhereid=1"和$sql="select*fromarticlewhereid=1",都可以得到正确的结果,但有时分开写或许

网上提供的最简便的MySql数据库备份的方法 使用MYSQL进行数据库备份,又很正规的数据库备份方法,同其他的数据库服务器有相同的概念,但有没有想过,MySQL会有更简捷的使用文件目录的备份方

标签: mysql两张表差异数据

本文链接地址:https://www.jiuchutong.com/biancheng/319842.html 转载请保留说明!

上一篇:如何把ACCESS的数据导入到Mysql中(如何把access数据库导入excel)

下一篇:GROUP_CONCAT的用法(concat group)

  • 取得的证券投资业绩
  • 旅游公司的账务框架
  • 公司组织旅游的费用要交个税
  • 以前年度所得税退税会计分录
  • 小规模第一次申请发票能领多少
  • 简易计征怎么开票
  • 应收账款转为其他应收款
  • 个人开劳务发票怎么开
  • 社会组织属于非法人组织吗为什么
  • 上缴财政收入怎么做账
  • 小规模纳税人怎么查询
  • 项目部建筑施工筹建期会计账务处理
  • 普通发票红字冲销发票怎么操作
  • 增值税专用发票抵扣最新规定
  • 农产品收购发票怎么抵扣
  • 公司购买的一次性纸杯计入哪个科目
  • 利润表季报表
  • 未分配利润为负的原因
  • 个体户怎
  • 鸿蒙系统桌面文件夹建立
  • redhat5.6安装
  • 保险公司工伤保险
  • 电脑开机时出现用户账户控制提示
  • php定义静态变量的关键字
  • 财政补助收入核算内容
  • PHP:getallheaders()的用法_Apache函数
  • 投资性房地产转换日公允价值大于账面价值
  • php数组函数有哪些
  • agsservice是什么进程
  • 个人通讯费可以税前扣除吗
  • php统计字符串长度
  • 转让居民企业的股权所得交企业所得税吗
  • 免费GPU:九天•毕昇平台使用教程
  • 预定义变量是什么
  • 从零开始文章
  • 关于猿猴的作文
  • smarty模板引擎
  • 残疾证哪里发
  • 企业支付给其他单位劳务费时需要代扣代缴个税吗
  • 建筑工程价款结算
  • 原材料结转成本有几种方法
  • 印花税申报时间填错造成逾期怎么办
  • 4s店开的维修发票怎么开
  • 职工体检费用标准规定
  • 固定资产折旧加计扣除最新政策
  • 免税申报表里的免税销售额是不含税
  • 所得税费用是什么意思
  • 哪些免征土地使用税
  • 一般纳税人增值税优惠政策2023
  • 固定资产的期末余额反映固定资产原值的结余额
  • 增值税普通发票和电子普通发票的区别
  • 油卡充值做账
  • 员工福利费是不是免税项目
  • 企业正常经营的条件
  • 长期股权投资两种核算方法的区别
  • 研发费用入账
  • 记账凭证账务处理程序的特点是直接根据每张
  • 小规模差额征税申报表怎么填
  • 营业外收入核算的内容有
  • 实收资本认缴怎么做账,要做账吗
  • 会计凭证用什么纸打印
  • 总账会计的岗位目的
  • 数据库连接说明
  • mysql8.0远程连接
  • win7开机启动
  • windows server 2008的技巧:防止ping的方法
  • solaris 磁盘管理
  • 一步一步教会你走路
  • win7音频服务未响应
  • win7开始菜单中的应用程序图标隐藏了
  • iframe的高度自适应
  • linux shell if -e
  • 怎么做一个扇形图
  • javascript入门书
  • 不含税价是除以1.13还是乘以0.87
  • 河南税务公众号缴费养老保险
  • 企业不做审计会有什么后果?
  • 进口完税价格包括哪些部分
  • 国税手撕发票图片
  • 设区市是哪里
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

    网站地图: 企业信息 工商信息 财税知识 网络常识 编程技术

    友情链接: 武汉网站建设