`
varsoft
  • 浏览: 2508521 次
  • 性别: Icon_minigender_1
  • 来自: 上海
文章分类
社区版块
存档分类
最新评论

[原创]MySQL中MyISAM引擎和Heap引擎执行速度性能测试

阅读更多


MySQL中MyISAM引擎和Heap引擎执行速度性能测试

【测试环境】

CPU: Intel Pentium4 2.66GHz
Memory: 1GB
Disk: 73GB/SCSI

OS: FreeBSD 4.11
PHP: PHP 5.2.1
MySQL: MySQL 4.1.23b

【 前期工作 】

[ my.cnf ]

max_heap_table_size=128M


[ 建表 ]

usetest;

--
--
Storeengineheap
--
CREATETABLE`tbl_heap`(
`id`
int(11)NOTNULLauto_increment,
`name`
varchar(32)NOTNULLdefault'',
`email`
varchar(32)NOTNULLdefault'',
`summary`
varchar(255)default'',
KEY`id`(`id`)
)ENGINE
=HEAPDEFAULTCHARSET=gbk;

--
--
Storeenginemyisam
--
CREATETABLE`tbl_isam`(
`id`
int(11)NOTNULLauto_increment,
`name`
varchar(32)NOTNULLdefault'',
`email`
varchar(32)NOTNULLdefault'',
`summary`
varchar(255)default'',
KEY`id`(`id`)
)ENGINE
=MyISAMDEFAULTCHARSET=gbk;


【插入数据】

说明:每次都是空表插入数据

[插入10000 Record]
Heap engine insert 10000 record used time: 3.5008587837219
MyISAM engine insert 10000 record used time: 4.5881390571594

[50000 Record]
Heap engine insert 50000 record used time: 19.895354986191
MyISAM engine insert 50000 record used time: 33.866044998169

[100000 Record]
Heap engine insert 100000 record used time: 36.200875997543
MyISAM engine insert 100000 record used time: 68.34194111824

[200000 Record]
Heap engine insert 200000 record used time: 68.00207901001
MyISAM engine insert 200000 record used time: 125.26263713837


【查询数据】

表里分表有:200000条记录,两个表数据一致

[直接select,10000次,每次取100条记录]
Heap engine select 10000 times, 100 record used time: 12.122506141663
MyISAM engine select 10000 times, 100 record used time: 19.512896060944

[直接select,1000次,每次取10000条记录]
Heap engine select 1000 times, 10000 record used time: 111.54126811028
MyISAM engine select 1000 record used time: 116.79438710213

[增加where条件,1000次,每次取10000条记录]
Heap engine select 1000 times, 10000 record used time: 111.52102303505
MyISAM engine select 1000 times, 10000 record used time: 117.68481087685

[where条件,10000次,每次从1000条起,取1000条记录]
Heap engine select 10000 times, 1000 record used time: 124.28988695145
MyISAM engine select 10000 times, 1000 record used time: 139.82107305527

[where条件增加like,10000次,每次从1000条起,取1000条记录]
Heap engine select 10000 times, 1000 record used time: 145.43780493736
MyISAM engine select 10000 times, 1000 record used time: 163.56296992302

[where条件增加索引,10000次,每次从1000条起,取1000条记录]

-- 建立索引 (在SQLyob下执行)
ALTER TABLE tbl_heap ADD INDEX idx_name (name);
ALTER TABLE tbl_isam ADD INDEX idx_name (name);

Heap engine alter table add index used time: 2.078
MyISAM engine alter table add index used time: 13.516

Heap engine select 10000 times, 1000 record used time: 153.48922395706
MyISAM engine select 10000 times, 1000 record used time: 239.86818814278

PS: 不合适的索引还不如不要。。。-_-#

[SQLyog下进行count操作]
Heap engine select count used time: 4.53
MyISAM engine select count used time: 3.28

[SQLyob下进行select操作]
速度都很快,都在1秒一下,不论是1000条记录,还是200000条记录,个人猜测可能不准确


【更新操作】

[更新所有name=heiyeluren的记录为heiyeluren2,在SQLyog下执行]
Heap engine update used time: 2.500
MyISAM engine update used time: 16.000


【删除操作】

[删除所有name=heiyeluren2的记录,在SQLyog下执行]
Heap engine delete used time: 51.172
MyISAM engine delte used time: 5.578

【总结】

Heap在插入、查询、更新操作上明显要比MyISAM快,但是删除操作稍微比较慢,可能跟它在内存中的存储结构有关系,所以我们完全可以把Heap作为我们一个MyISAM表的一个备份,比如可以保存一些实时性要求比较高的数据,比如点击量、评论量、固定的用户信息等等,因为这些信息普遍就是插入和查询操作。

当然了,Heap也没有比MyISAM快太多,这样说明我的MyISAM速度还是非常快的,所以一般情况下,MyISAM能够满足大部分的应用了,如果数据太多的情况,可以考虑把部分常用的数据保存到Heap表中,同时也可以结合Memcache等缓存工具来帮助缓存数据。

另外,关于InnoDB和MyISAM的性能测试,可以参考我之前的测试数据:
http://blog.csdn.net/heiyeshuwu/archive/2007/04/10/1559640.aspx

【测试代码】

<?php
/**
*functionlib
*/
functionconn(){
$host="localhost";
$user="root";
$pass="";
$db="test";

$conn=mysql_connect($host,$user,$pass);
if(!$conn||!is_resource($conn)){
die("Connecttomysqlfailed:".mysql_error());
}
mysql_select_db($db);
return$conn;
}

functionquery($conn,$sql){
$res=mysql_query($sql,$conn);
if(!$res){
echomysql_error()." ";
returnfalse;
}
returntrue;
}

functionget_data($conn,$sql){
$res=mysql_query($sql,$conn);
if(!$res){
echomysql_error()." ";
returnfalse;
}
$result=array();
while($row=mysql_fetch_array($res)){
$result[]=$row;
}
return$result;
}

functionget_time()
{
list($usec,$sec)=explode("",microtime());
return((float)$usec+(float)$sec);
}

/**
*Inserttest
*/
$conn=conn();
$count=200000;

//Heapengine
$s1=get_time();
for($i=0;$i<$count;$i++){
query(
$conn,"insertintotbl_heapsetname='heiyeluren',email='heiyeluren@abc.com',summary='Thismessageissummary'");
}
$e1=get_time();
echo"Heapengineinsert$countrecordusedtime:".($e1-$s1)." ";


//MyISAMengine
$s2=get_time();
for($i=0;$i<$count;$i++){
query(
$conn,"insertintotbl_isamsetname='heiyeluren',email='heiyeluren@abc.com',summary='Thismessageissummary'");
}
$e2=get_time();
echo"MyISAMengineinsert$countrecordusedtime:".($e2-$s2)." ";


/**
*Selecttest
*/

$count=1000;
$records=10000;

$s1=get_time();
for($i=0;$i<$count;$i++){
$res=get_data($conn,"select*fromtbl_heaplimit$records");
unset($res);
}
$e1=get_time();
echo"Heapengineselect$countrecordusedtime:".($e1-$s1)." ";


$s2=get_time();
for($i=0;$i<$count;$i++){
$res=get_data($conn,"select*fromtbl_isamlimit$records");
unset($res);
}
$e2=get_time();
echo"MyISAMengineselect$countrecordusedtime:".($e2-$s2)." ";

?>

分享到:
评论

相关推荐

    mysql中的表引擎

    MySQL中的表引擎是数据库管理系统的重要组成部分,它们负责数据的存储、检索和管理。数据库引擎的定义可以理解为数据处理的核心服务,...在实践中,可能需要结合业务需求和性能测试结果,不断调整和优化表引擎的选择。

    MySQL数据库引擎快速指导

    HEAP引擎,又称MEMORY引擎,用于创建仅存在于内存中的临时表,执行速度快,但数据不稳定且在系统关闭时会丢失。它适合处理临时数据或需要快速响应的查询。务必在使用完毕后删除表格以避免资源浪费。 InnoDB和BDB...

    MySQL数据库存储引擎探析.docx

    本文将深入探讨 MySQL 数据库中常用的存储引擎,包括 InnoDB、MyISAM、Memory(HEAP)和 Archive 等。 一、InnoDB 存储引擎 InnoDB 是 MySQL 的默认存储引擎,它提供了强大的事务处理、行级锁定和外键约束功能。...

    mysql 存储引擎和表类型

    3. **MEMORY(HEAP)**:MEMORY存储引擎创建的表存储在内存中,数据读取速度极快,但一旦服务器关闭,表中的数据将丢失。由于完全依赖内存,因此表大小受限于可用内存。MEMORY适合临时存储和快速计算的场景。 4. **...

    mySql引擎相关知识

    本文将详细介绍MySQL中最常见的几种存储引擎:ISAM、MyISAM、HEAP以及InnoDB,并对MyISAM与InnoDB进行比较分析。 #### 二、存储引擎介绍 ##### 1. ISAM - **特点**:ISAM是一种经典的文件组织方式,它在设计之初...

    mysql源代码,深入学习mysql必须分析其源代码

    `myisammrg`可能与MyISAM存储引擎有关,MyISAM是MySQL早期默认的非事务处理引擎,它的优点在于读取速度快,但不支持事务。这个文件可能包含了关于MyISAM表合并的操作,用于处理多表数据的合并查询。 `TEST1`可能是...

    MySQL 5.1中文手冊

    7.5.4. 编译和链接怎样影响MySQL的速度 7.5.5. MySQL如何使用内存 7.5.6. MySQL如何使用DNS 7.6. 磁盘事宜 7.6.1. 使用符号链接 8. 客户端和实用工具程序 8.1. 客户端脚本和实用工具概述 8.2. myisampack:生成压缩...

    Mysql数据库性能优化

    MySQL数据库性能优化是一个涵盖多个方面的主题,涉及到数据库配置、索引优化、查询优化、存储引擎选择、内存管理以及数据模型设计等多个环节。以下是对这些关键领域的详细解释: 1. **数据库配置**: - `my.cnf` ...

    MySQL的体系结构及InnoDB表引擎的配置.pdf

    MySQL支持多种表引擎,如InnoDB、BDB、HEAP、ISAM、MYISAM和MERGE。其中,InnoDB和BDB支持事务处理,适合需要高数据一致性的应用场景,但它们的读写速度相对较慢。其他不支持事务的引擎,如MYISAM,其读取速度较快,...

    MySQL 5.1官方简体中文参考手册

    7.5.4. 编译和链接怎样影响MySQL的速度 7.5.5. MySQL如何使用内存 7.5.6. MySQL如何使用DNS 7.6. 磁盘事宜 7.6.1. 使用符号链接 8. 客户端和实用工具程序 8.1. 客户端脚本和实用工具概述 8.2. myisampack:生成压缩...

    MYSQL中文手册

    7.5.4. 编译和链接怎样影响MySQL的速度 7.5.5. MySQL如何使用内存 7.5.6. MySQL如何使用DNS 7.6. 磁盘事宜 7.6.1. 使用符号链接 8. 客户端和实用工具程序 8.1. 客户端脚本和实用工具概述 8.2. myisampack:...

    mysql5.1中文手册

    编译和链接怎样影响MySQL的速度 7.5.5. MySQL如何使用内存 7.5.6. MySQL如何使用DNS 7.6. 磁盘事宜 7.6.1. 使用符号链接 8. 客户端和实用工具程序 8.1. 客户端脚本和实用工具概述 8.2. ...

    MySQL 5.1参考手册中文版

    7.5.4. 编译和链接怎样影响MySQL的速度 7.5.5. MySQL如何使用内存 7.5.6. MySQL如何使用DNS 7.6. 磁盘事宜 7.6.1. 使用符号链接 8. 客户端和实用工具程序 8.1. 客户端脚本和实用工具概述 8.2. myisampack:生成...

    MySQL面试题(含答案).pdf

    MySQL是一种流行的开源关系型数据库管理系统,以其高效、稳定和易用...以上是MySQL面试中常见的知识点,涵盖数据库特性、表类型、数据类型、事务处理、存储引擎等多个方面,这些知识对理解和操作MySQL数据库至关重要。

    MySQL 5.1参考手册

    7.5.4. 编译和链接怎样影响MySQL的速度 7.5.5. MySQL如何使用内存 7.5.6. MySQL如何使用DNS 7.6. 磁盘事宜 7.6.1. 使用符号链接 8. 客户端和实用工具程序 8.1. 客户端脚本和实用工具概述 8.2. myisampack:生成压缩...

    MySQL5.1参考手册官方简体中文版

    7.5.4. 编译和链接怎样影响MySQL的速度 7.5.5. MySQL如何使用内存 7.5.6. MySQL如何使用DNS 7.6. 磁盘事宜 7.6.1. 使用符号链接 8. 客户端和实用工具程序 8.1. 客户端脚本和实用工具概述 8.2. myisampack:生成压缩...

    mysql官方中文参考手册

    7.5.4. 编译和链接怎样影响MySQL的速度 7.5.5. MySQL如何使用内存 7.5.6. MySQL如何使用DNS 7.6. 磁盘事宜 7.6.1. 使用符号链接 8. 客户端和实用工具程序 8.1. 客户端脚本和实用工具概述 8.2. myisampack:生成压缩...

Global site tag (gtag.js) - Google Analytics