知识大全 MySQL两种表存储结构性能比较测试过程

Posted

篇首语:对搞科学的人来说,勤奋就是成功之母!本文由小常识网(cha138.com)小编为大家整理,主要介绍了知识大全 MySQL两种表存储结构性能比较测试过程相关的知识,希望对你有一定的参考价值。

MySQL两种表存储结构性能比较测试过程  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!

  MySQL支持的两种主要表存储格式MyISAM InnoDB 上个月做个项目时 先使用了InnoDB 结果速度特别慢 秒钟只能插入 几条 后来换成MyISAM格式 一秒钟插入上万条 当时觉的这两个表的性能也差别太大了吧 后来自己推测 不应该差别这么慢 估计是写的插入语句有问题 决定做个测试     测试环境 Redhat Linux CPU 内存 G MySQL版本为 gamma standard    测试程序 Python+Python MySQL模块      测试方案      MyISAM格式分别测试 事务和不用事务两种情况      InnoDB格式分别测试AutoCommit= (不用begin transaction和用begin transaction模式)     AutoCommit= (不用begin transaction和用begin transaction模式)四种情况     测试方法为插入 条记录 为了测试不互相影响 单独建立了专用的测试表 建表语句如下      MyISAM不用事务表     CREATE TABLE `MyISAM_NT` (    `TableId` int( ) NOT NULL default     `TableString` varchar( ) NOT NULL default     ) ENGINE=MyISAM;     MyISAM用事务表:    CREATE TABLE `MyISAM_TS` (    `TableId` int( ) NOT NULL default     `TableString` varchar( ) NOT NULL default     ) ENGINE=MyISAM;     InnoDB关闭AutoCommit 不用事务:    CREATE TABLE `INNODB_NA_NB` (    `TableId` int( ) NOT NULL default     `TableString` varchar( ) NOT NULL default     ) ENGINE=InnoDB;     InnoDB关闭AutoCommit 用事务:    CREATE TABLE `INNODB_NA_BE` (    `TableId` int( ) NOT NULL default     `TableString` varchar( ) NOT NULL default     ) ENGINE=InnoDB;     InnoDB开启AutoCommit 不用事务:    CREATE TABLE `INNODB_AU_NB` (    `TableId` int( ) NOT NULL default     `TableString` varchar( ) NOT NULL default     ) ENGINE=InnoDB;     InnoDB开启AutoCommit 用事务:    CREATE TABLE `INNODB_AU_BE` (    `TableId` int( ) NOT NULL default     `TableString` varchar( ) NOT NULL default     ) ENGINE=InnoDB;    测试的Python脚本如下     #!/usr/bin/env Python         MyISAM InnoDB性能比较    作者 空心菜(Invalid)    时间          import MySQLdb    import sys    import os    import string    import time    c = None    testtables = [( MyISAM_NT None )     ( MyISAM_TS None )     ( INNODB_NA_NB )     ( INNODB_NA_BE )     ( INNODB_AU_NB )     ( INNODB_AU_BE )    ]    def BeginTrans():    print ExecSQL:BEGIN;     c execute( BEGIN; )    return    def Commit():    print ExecSQL:MIT;     c execute( MIT; )    return    def AutoCommit(flag):    print ExecSQL:Set AUTOMIT = +str(flag)    c execute( Set AUTOMIT = +str(flag))    return    def getcount(table):    #print ExecSQL:select count(*) from +table    c execute( select count(*) from +table)    return c fetchall()[ ][ ]    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 ;    return c rowcount    def main():    argv = sys argv    if len(argv) < :    print Usage: argv[ ] TableId TestCount \\n     sys exit( )    global c #mysql访问cursor    db_host = localhost     db_name = demo     db_user = root     db_user_passwd =     print Config:[%s %s/%s %s] DB\\n %(db_host db_user db_user_passwd db_name)    if len(argv) > :    tableid = argv[ ]    testcount = int(argv[ ]) #    for test in testtables:    #每次操作前都重写建立数据库连接    try:    mdb = nnect(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( )    else:    c = mdb cursor()    table automit trans = test    starttime = time time()    print table time strftime( %y %m %d %H:%M:%S time localtime())    if automit != None:    AutoCommit(automit)    if trans == :    BeginTrans()    for i in xrange(testcount):    tablestring = % d %i    if (AddTable(table tableid tablestring)< ):    print AddTable Error tablestring    if trans == :    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] DB    MyISAM_NT : :      : :     MyISAM_NT count: used time:     MyISAM_TS : :     ExecSQL:BEGIN;    ExecSQL:MIT;     : :     MyISAM_TS count: used time:     INNODB_NA_NB : :     ExecSQL:Set AUTOMIT =      : :     INNODB_NA_NB count: used time:     INNODB_NA_BE : :     ExecSQL:Set AUTOMIT =     ExecSQL:BEGIN;    ExecSQL:MIT;     : :     INNODB_NA_BE count: used time:     INNODB_AU_NB : :     ExecSQL:Set AUTOMIT =      : :     INNODB_AU_NB count: used time:     INNODB_AU_BE : :     ExecSQL:Set AUTOMIT =     ExecSQL:BEGIN;    ExecSQL:MIT;     : :     INNODB_AU_BE count: used time:      结论     由此得知影响速度的主要原因是AUTOMIT默认设置是打开的 我当时的程序没有显式调用BEGIN;开始事务 导致每插入一条都自动Commit 严重影响了速度 cha138/Article/program/MySQL/201311/29332

相关参考

顽固性牛皮癣的两种表形形式

我想对于牛皮癣有一种非常简单的分类,根据牛皮癣本身的治疗难度,将牛皮癣分为顽固性和寻常型牛皮癣,当然牛皮癣患者都知道的,顽固性牛皮癣治疗起来难度比较大,而对于顽固性牛皮癣的研究也是比较多的,今天我们就

知识大全 PHP调用MySQL的存储过程

PHP调用MySQL的存储过程  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  MySQL好像从开

知识大全 php调用MySQL存储过程的方法集合

php调用MySQL存储过程的方法集合  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!本篇文章是对p

知识大全 MySQL数据库新特性之存储过程入门教程

MySQL数据库新特性之存储过程入门教程  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!在MYSQL

知识大全 MySQL 5.0 新特性教程 存储过程:第二讲

MySQL5.0新特性教程存储过程:第二讲  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  Why

知识大全 MySQL 5.0新特性教程 存储过程:第一讲

MySQL5.0新特性教程存储过程:第一讲  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  Int

知识大全 MySQL 5.0 数据库新特性的存储过程

MySQL5.0数据库新特性的存储过程  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  当你提交一

知识大全 MySQL 基准测试套件

高性能MySQL:MySQL基准测试套件  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  MySQ

知识大全 浅析对MYSQL进行压力测试的过程

浅析对MYSQL进行压力测试的过程  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!安装supersm

知识大全 高性能MySQL

高性能MySQL  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  第章MySQL基准测试  为什么