网络编程
位置:首页>> 网络编程>> 数据库>> MySQL两种表存储结构性能比较测试过程(2)

MySQL两种表存储结构性能比较测试过程(2)

 来源:编程中国 发布时间:2007-12-09 12:45:00 

标签:mysql,测试,性能

MyISAM,InnoDB性能比较


作者:空心菜(Invalid)

import MySQLdb 
import sys 
import os 
import string 
import time
c = None 
testtables = [("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;") 
return 
def Commit(): 
print "ExecSQL:COMMIT;" 
c.execute("COMMIT;") 
return 
def AutoCommit(flag): 
print "ExecSQL:Set AUTOCOMMIT = "+str(flag) 
c.execute("Set AUTOCOMMIT = "+str(flag)) 
return 
def 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.rowcount 
def 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] DB\n"%(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 = "%020d"%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] DB 
MyISAM_NT 04-10-22 16:33:24 
04-10-22 16:33:26 
MyISAM_NT count: 10000 used time: 2.1132440567 
MyISAM_TS 04-10-22 16:33:26 
ExecSQL:BEGIN; 
ExecSQL:COMMIT; 
04-10-22 16:33:29
MyISAM_TS count: 10000 used time: 2.65475201607 
INNODB_NA_NB 04-10-22 16:33:29  
ExecSQL:Set AUTOCOMMIT = 0 
04-10-22 16:33:31 
INNODB_NA_NB count: 10000 used time: 2.51947999001 
INNODB_NA_BE 04-10-22 16:33:31 
ExecSQL:Set AUTOCOMMIT = 0 
ExecSQL:BEGIN;
ExecSQL:COMMIT; 
04-10-22 16:33:35
INNODB_NA_BE count: 10000 used time: 3.85625100136 
INNODB_AU_NB 04-10-22 16:33:35 
ExecSQL:Set AUTOCOMMIT = 1 
04-10-22 16:34:19 
INNODB_AU_NB count: 10000 used time: 43.7153041363 
INNODB_AU_BE 04-10-22 16:34:19 
ExecSQL:Set AUTOCOMMIT = 1 
ExecSQL:BEGIN; 
ExecSQL:COMMIT;
04-10-22 16:34:22 
INNODB_AU_BE count: 10000 used time: 3.14328193665 


由此得知影响速度的主要原因是AUTOCOMMIT默认设置是打开的, 我当时的程序没有显式调用BEGIN;开始事务,导致每插入一条都自动Commit,严重影响了速度。

算来也是个低级错误!

相关参考:

http://dev.mysql.com/doc/MySQL/en/COMMIT.html

http://dev.mysql.com/doc/MySQL/en/InnoDB_and_AUTOCOMMIT.html  

0
投稿

猜你喜欢

  •     CSS的出现使网页制作者在对网页元素的控制方便许多,当然,有利必有弊,CSS只能对颜色、大小、距离等静
  •  <style> #L { position:absolute; color:
  • 一个表单焦点效果javascript函数,可以用在美化表单界面,挺好看的。function validForms(){  
  • 一切从一个糟糕的浏览器开始,它完全不支持 XHTML。什么是 MIME Type? 为什么这么说呢?首先,我们要了解浏览器是如何处理内容的。
  •     Q:Dreamweaver(简称DW)中如何输入空格?A:按下“Ctrl+Shift+空格键”或者在中
  • 首先要说明的是,这个标题有点标题党的意思,这个 bug 也存在于 IE8 下,在 IE6 和 IE7 下正常。之前写过两篇关于 I
  •   很多年前,我们就可以轻易的从很多国营商场、火车车厢、饭馆旅馆中看到墙上挂的那个小本本-意见薄,作为经营方与顾客沟通的
  • 以国内最流行ASP为例,我不知道有多少人会在写代码时想到“容错”这个概念,实际上当我遇到这种事时,也是不了了之。为什么呢,想想最初的意思是认
  • 合理地扩大页面链接响应区域可以提高网页的易用性。同时还要兼顾到链接的交互一致性以及视觉上的平衡,就需要做一些特殊的处理。实例一:一张图配一个
  • 本文描述通过统计分析出医院信息系统需分区的表,对需分区的表选择分区键,即找出包括在你的分区键中的列(表的属性),对大型数据的管理比较有意义,
  • --语 句 功 能--数据操作SELECT --从数据库表中检索数据行和列INSERT --向数据库表添加新数据行DELETE --从数据库
  • rem ---表单提示函数 Being-----------------------------CODE Copy ...  Fu
  • asp ajax json教程首先用ACCESS建json.mdb的库,然后建一个表t_jsontable,字段如下:jt_id,jt_na
  • 本文的asp xmlhttp类,使用asp的MSXML2.ServerXMLHTTP组件来获取远程音乐文件。类定义 Cls_AspHttp.
  • 众所周知,IE 6只支持单通道的PNG图片(即只有透明/不透明2种状态,gif图片的透明单通道透明),因此如果需要使用alpha透明的png
  • 现在电子商务网站的设计,正面临着一系列的挑战,其中最主要的挑战是:我们尝试建立一种用户体验,来提高用户在线购物的可能性。为了对抗网上激烈的竞
  • 分页浏览功能是常见的Web应用功能,对于MySQL数据库来说可以很轻松的使用limit语句实现分页,而对于SQL Server数据库来说,常
  • 连接数据库:mysql -u用户名 -p密码导入数据 source d:\create.sql用下面的语句就可以导出mysql中的数据了:m
  • 【译者的话】 作为一家非盈利性的防止青少年 * 的机构, Five Alive 希望拥有一个独特的标志来配合机构的宣传。他们决定在网站上通过竞
  • 信息架构的组件可以拆分成四类组织系统 如何组织信息,例如,依据主题或年代顺序。标签系统 如何表示信息,例如,科学术语(“Acer”)或通俗术
手机版 网络编程 asp之家 www.aspxhome.com