BBS.ChinaUnix.net
今日推荐    首页 | 新闻 | Linux | AIX | 博客 | 论坛 | 存储 | 人才 | 培训 | 知识库 | 资料 | 读书 | 手册 | 精华 | 下载 | 空间     
  会员: 密码: 免费注册 | 忘记密码 | 会员登录 | 搜索 | 帮助 


innodb的速度比myisam的速度要慢很多啊????
首页 » 论坛 » MySQL »  
[打印] [订阅] [收藏] [推荐给朋友] [本帖文本页]
jason0127   帅哥
精灵王



UID:166321
注册:2004-6-21
最后登录: 2008-07-07
帖子:389
精华:0

可用积分:336
信誉积分:100
专家积分:0 (本版)

状态:...离线...

[个人空间] [短信] [博客]


顶部
1楼 发表于 2008-5-13 16:26 
测试很简单,用的是insert into tb1 select * from tb2
tb2有90多w条记录.
tb1是myisam时,插入时间只需要5s不到的时间.测试插入超过5000W条记录.也未超过5s
tb1是innodb时,插入时间则需要40多s的时间.autocommit模式打开和关闭都测试过.都需要40s以上的时间.

为什么innodb比myisam的要慢这么多.不知道我的配置有哪里不对.请各位DBA高手帮忙看看.谢谢!!!

tb1和tb2表结构如下,两个引擎都没加索引.

mysql> desc tb1;
+------------+-------------+------+-----+---------+-------+
| Field      | Type        | Null | Key | Default | Extra |
+------------+-------------+------+-----+---------+-------+
| id         | int(11)     | NO   |     | 0       |       |
| uid        | int(11)     | YES  | MUL | NULL    |       |
| mobile     | varchar(16) | YES  | MUL | NULL    |       |
| province   | int(11)     | YES  |     | NULL    |       |
| city       | int(11)     | YES  |     | NULL    |       |
| regtype    | varchar(16) | YES  |     | NULL    |       |
| comefrom   | varchar(32) | YES  |     | NULL    |       |
| uaid       | int(11)     | YES  |     | NULL    |       |
| ip         | varchar(64) | YES  |     | NULL    |       |
| optype     | int(4)      | YES  |     | NULL    |       |
| registtime | datetime    | YES  |     | NULL    |       |
| usertype   | int(4)      | YES  |     | NULL    |       |
+------------+-------------+------+-----+---------+-------+


硬件环境:dell1950(cpu:e5410,硬盘:146G*2,raid1,内存:4G)
innodb的一些参数:
innodb_file_per_table
innodb_buffer_pool_size = 2500M
innodb_additional_mem_pool_size = 256M
innodb_data_home_dir = /data/txdata/total
innodb_data_file_path = ibdata1:10M:autoextend
innodb_log_group_home_dir=/data/txdata/total
innodb_log_files_in_group = 2
innodb_log_file_size = 256M
innodb_log_buffer_size = 256M
innodb_max_dirty_pages_pct = 90
innodb_file_io_threads = 4
innodb_thread_concurrency = 16
innodb_flush_log_at_trx_commit = 0
innodb_open_files=1000
innodb_lock_wait_timeout = 120
innodb_status_file



您对本贴的看法:鲜花[0] 臭蛋[0]

__________________________________

踏踏实实做人,认认真真做事,快快乐乐生活。
路漫漫其修远兮,吾将上下而求索!!!
http://hi.baidu.com/hexie007
CU可用积分兑换Linux/Unix精品图书 |《Ubuntu标准教程》书评获奖名单公布
todayhero
精灵王




UID:180671
注册:2004-9-2
最后登录: 2008-07-07
帖子:261
精华:0

可用积分:254
信誉积分:100
专家积分:0 (本版)

状态:...离线...

[个人空间] [短信] [博客]


顶部
2楼 发表于 2008-5-13 16:56 
MyISAM:这个是默认类型,它基于传统的ISAM类型,它是存储记录和文件的标准方法.与其他存储引擎比较,MyISAM具有检查和修复表格的大多数工具. MyISAM表格可以被压缩,而且它们支持全文搜索.select速度快.它们不是事务安全的,而且也不支持外键。

InnoDB:这种类型是事务安全的.它与BDB类型具有相同的特性,它们还支持外键.InnoDB表格速度很快.具有比BDB还丰富的特性,因此如果需要一个事务安全的存储引擎,建议使用它.如果你的数据执行大量的INSERT或UPDATE,出于性能方面的考虑,应该使用InnoDB表。

理论上innodb表类型是比较适合你.因为你是insert操作.

现在表现不出innodb表类型的优点.你可使用默认的my.cnf配置文件进行配置.不要人为改变看一下情况. 这样可以排除你的配置文件本身的问题.

如果使用默认配置文件,还是速度比较慢.建议你不要使用insert into tb1 select * from tb2这样的语句插入.因为你要select查询.这不是innodb表的优势,而是myisam表的优势.对于查询90W条记录的来说.myisam的速度会比innodb快.你查询出90W条纪录再插入5K记录.我感觉你根本没有发挥innodb表优势.而是发挥myisam表的优势.所以myisam速度比innodb表速度要快很多的原因.

直接insert 插入,不要使用嵌套select

[ 本帖最后由 todayhero 于 2008-5-13 16:58 编辑 ]



您对本贴的看法:鲜花[0] 臭蛋[0]
CU可用积分兑换Linux/Unix精品图书 |《Ubuntu标准教程》书评获奖名单公布
版主 yueliangdao0608   帅哥 ((上帝他爷-深圳DBA))
版主-法师
上帝他爷


CU奥运火炬传递手2008
UID:242895
注册:2005-3-22
最后登录: 2008-07-07
帖子:6464
精华:5

可用积分:2777
信誉积分:130
专家积分:68 (本版)

来自:中国-红灯区-深圳
状态:...保密...

[个人空间] [短信] [博客]


顶部
3楼 发表于 2008-5-13 17:16 
set @autocommit=0;
然后插入。



您对本贴的看法:鲜花[0] 臭蛋[0]

__________________________________


我怎么骑一次上帝他老婆,就觉得生活越来越迷茫了?
最近在疯狂练习英语。。。
----------------------------------

进入我的博客

CU可用积分兑换Linux/Unix精品图书 |《Ubuntu标准教程》书评获奖名单公布
版主 yueliangdao0608   帅哥 ((上帝他爷-深圳DBA))
版主-法师
上帝他爷


CU奥运火炬传递手2008
UID:242895
注册:2005-3-22
最后登录: 2008-07-07
帖子:6464
精华:5

可用积分:2777
信誉积分:130
专家积分:68 (本版)

来自:中国-红灯区-深圳
状态:...保密...

[个人空间] [短信] [博客]


顶部
4楼 发表于 2008-5-13 17:25 
因为INNODB要写日志,MYISAM不需要。
要快的话,先用MYISAM。然后转化成INNODB.



您对本贴的看法:鲜花[0] 臭蛋[0]

__________________________________


我怎么骑一次上帝他老婆,就觉得生活越来越迷茫了?
最近在疯狂练习英语。。。
----------------------------------

进入我的博客

CU可用积分兑换Linux/Unix精品图书 |《Ubuntu标准教程》书评获奖名单公布
jason0127   帅哥
精灵王



UID:166321
注册:2004-6-21
最后登录: 2008-07-07
帖子:389
精华:0

可用积分:336
信誉积分:100
专家积分:0 (本版)

状态:...离线...

[个人空间] [短信] [博客]


顶部
5楼 发表于 2008-5-13 17:26 
谢谢楼上各位兄弟的热情回复.我有个应用需要对类似这样的表结构进行操作,事务用不到.里面的记录在2kw条以上.之前一直用的是myisam,整个应用跑完用5个小时就可以了,现在改成innodb跑了十几个小时了,还没结束.郁闷.
在考虑是不是要改回myisam,但是更改引擎的过程要花近5个小时.
对innodb有点失望啊......



您对本贴的看法:鲜花[0] 臭蛋[0]

__________________________________

踏踏实实做人,认认真真做事,快快乐乐生活。
路漫漫其修远兮,吾将上下而求索!!!
http://hi.baidu.com/hexie007
CU可用积分兑换Linux/Unix精品图书 |《Ubuntu标准教程》书评获奖名单公布
jason0127   帅哥
精灵王



UID:166321
注册:2004-6-21
最后登录: 2008-07-07
帖子:389
精华:0

可用积分:336
信誉积分:100
专家积分:0 (本版)

状态:...离线...

[个人空间] [短信] [博客]


顶部
6楼 发表于 2008-5-13 17:28 


QUOTE:
原帖由 yueliangdao0608 于 2008-5-13 17:25 发表
因为INNODB要写日志,MYISAM不需要。
要快的话,先用MYISAM。然后转化成INNODB.

那我把日志文件改小点,或者再加日志缓冲大小.会不会有效果???



您对本贴的看法:鲜花[0] 臭蛋[0]

__________________________________

踏踏实实做人,认认真真做事,快快乐乐生活。
路漫漫其修远兮,吾将上下而求索!!!
http://hi.baidu.com/hexie007
CU可用积分兑换Linux/Unix精品图书 |《Ubuntu标准教程》书评获奖名单公布
版主 yueliangdao0608   帅哥 ((上帝他爷-深圳DBA))
版主-法师
上帝他爷


CU奥运火炬传递手2008
UID:242895
注册:2005-3-22
最后登录: 2008-07-07
帖子:6464
精华:5

可用积分:2777
信誉积分:130
专家积分:68 (本版)

来自:中国-红灯区-深圳
状态:...保密...

[个人空间] [短信] [博客]


顶部
7楼 发表于 2008-5-14 09:10 


QUOTE:
原帖由 jason0127 于 2008-5-13 17:28 发表




那我把日志文件改小点,或者再加日志缓冲大小.会不会有效果???

试试不就知道了



您对本贴的看法:鲜花[0] 臭蛋[0]

__________________________________


我怎么骑一次上帝他老婆,就觉得生活越来越迷茫了?
最近在疯狂练习英语。。。
----------------------------------

进入我的博客

CU可用积分兑换Linux/Unix精品图书 |《Ubuntu标准教程》书评获奖名单公布
cxczqfrx   帅哥
光明使者




UID:214950
注册:2005-1-12
最后登录: 2008-07-07
帖子:966
精华:0

可用积分:1451
信誉积分:100
专家积分:0 (本版)

状态:...离线...

[个人空间] [短信] [博客]


顶部
8楼 发表于 2008-5-14 11:22 
如果应用不多,且着重速度的话,还是用MYISAM



您对本贴的看法:鲜花[0] 臭蛋[0]
CU可用积分兑换Linux/Unix精品图书 |《Ubuntu标准教程》书评获奖名单公布
版主 qlks   帅哥
版主-光明使者




UID:272085
注册:2005-5-24
最后登录: 2008-06-26
帖子:729
精华:1

可用积分:741
信誉积分:100
专家积分:0 (本版)

状态:...离线...

[个人空间] [短信] [博客]


顶部
9楼 发表于 2008-5-14 14:39 


QUOTE:
原帖由 yueliangdao0608 于 2008-5-13 17:25 发表
因为INNODB要写日志,MYISAM不需要。
要快的话,先用MYISAM。然后转化成INNODB.

MyISAM就不写日志了?



您对本贴的看法:鲜花[0] 臭蛋[0]
CU可用积分兑换Linux/Unix精品图书 |《Ubuntu标准教程》书评获奖名单公布
版主 qlks   帅哥
版主-光明使者




UID:272085
注册:2005-5-24
最后登录: 2008-06-26
帖子:729
精华:1

可用积分:741
信誉积分:100
专家积分:0 (本版)

状态:...离线...

[个人空间] [短信] [博客]


顶部
10楼 发表于 2008-5-14 14:44 
就这个比较来说InnoDB是速度比MyISAM慢的
1.InnoDB是事务安全的,能保证这次操作
MyISAM不能保证,如果5s的时间内你在第3S的时候退出了,或者服务器Crash了,你考虑过这个问题吗?
2.还有我不知道你具体的怎么测得,配置的参数是怎么样的?这个很可能影响结果
3.你的操作没有并发的,你考虑过并发的情况没有?并发情况MyISAM就锁住了,这个在生产环境都是应该考虑进去的



您对本贴的看法:鲜花[0] 臭蛋[0]
CU可用积分兑换Linux/Unix精品图书 |《Ubuntu标准教程》书评获奖名单公布

首页 » 论坛 » MySQL »


 


Copyright © 2001-2008 ChinaUnix.net All Rights Reserved     联系我们:

感谢所有关心和支持过ChinaUnix的朋友们    转载本站内容请注明原作者名及出处

京ICP证041476号


清除 Cookies - ChinaUnix - Archiver - WAP - TOP

Processed in 0.046869 second(s), 4 queries , Gzip enabled