请教大家一个mysql的插入问题,困扰了好久了(刚才脱手了,重发)

wsg 发布于 2012/04/16 14:33
阅读 850
收藏 0

刚才发了个帖子,还没写完,换行的时候错打成了ctr加回车--就发出去了。

(http://www.oschina.net/question/117304_49201)

于是重发:

表名叫testTable。表结构在后面。 

对testTable的主要操作是插入和更新。此外有少量的检索。
插入的时候, UNIQUE列可能重复,重复了就更新表的其他列(同样的值有多个重复时,随便拿一行来更新即可)
(id是个自增列,不考虑他重复的情况)

想请教大家,这样的一张表,在表中数据量千万以上的时候,往里面进行百万数据量的插入操作的时候,速度大概是个什么级别呢?
比如,在CPU 2.66GHz,内存4G的时候,操作一百万的数据,
大概是个几秒呢,还是十几秒呢,还是几十秒呢,还是几百秒呢,还是几千秒呢。或者,上万秒?

以下是问题补充:

@wsg:表结构 CREATE TABLE `testTable` ( `id` int(10) unsigned NOT NULL auto_increment , `cVarchar255_1` varchar(255) NOT NULL , `cVarchar255_2` varchar(255) NOT NULL , `cInt` int(11) default NULL, `c1` varchar(2) default NULL , `c2` varchar(3) default NULL , `c3` tinyint(1) default '0' , `c4` date default NULL , `c5` varchar(255) default NULL , `c6` varchar(255) default NULL , `c7` varchar(255) default NULL , `c8` varchar(255) default NULL , `c9` varchar(255) default NULL , `c10` varchar(255) default NULL , `c11` int(10) unsigned NOT NULL , `c12` tinyint(3) default '1' , PRIMARY KEY (`id`), UNIQUE KEY `k1` (`cVarchar255_1`), KEY `k2` (`cInt`,`cVarchar255_1`(10)), KEY `k3` (`cVarchar255_2`) ) ENGINE=MyISAM (2012/04/16 14:38)
加载中
0
wsg
wsg
我测试的时候,从几十秒到几千秒都出现过。不知道为什么会差这么多。
wsg
wsg
但是没有可以总结规律。 不过,我也隐隐约约觉得跟缓存有关。----那是不是说,慢时正常的,快是因为碰上了缓存?
吃土的汉子
吃土的汉子
@wsg 时间的规律呈现什么样子?会不会是跟数据库的缓存有关系,数据库运行一段时间会维持一个缓存,如果正巧撞上取数据会少很多时间
0
wsg
wsg
CREATE TABLE `testTable` (

  `id` int(10) unsigned NOT NULL auto_increment ,
  `cVarchar255_1` varchar(255) NOT NULL ,
  `cVarchar255_2` varchar(255) NOT NULL ,
  `cInt` int(11) default NULL,

  `c1` varchar(2) default NULL ,
  `c2` varchar(3) default NULL ,
  `c3` tinyint(1) default '0' ,
  `c4` date default NULL ,
  `c5` varchar(255) default NULL ,
  `c6` varchar(255) default NULL ,
  `c7` varchar(255) default NULL ,
  `c8` varchar(255) default NULL ,
  `c9` varchar(255) default NULL ,
  `c10` varchar(255) default NULL ,
  `c11` int(10) unsigned NOT NULL ,
  `c12` tinyint(3) default '1' ,

  PRIMARY KEY  (`id`),
  UNIQUE KEY `k1` (`cVarchar255_1`),
  KEY `k2` (`cInt`,`cVarchar255_1`(10)),
  KEY `k3` (`cVarchar255_2`)

) ENGINE=MyISAM
0
0
雷志伟
雷志伟
几分钟以内应该都算正常吧. 看你以什么工具导入.
0
wsg
wsg

引用来自“ZhiWei”的答案

几分钟以内应该都算正常吧. 看你以什么工具导入.
我测试的时候都是用PHP连接的SQL代码。
用什么工具最快呢?有可以推荐的吗?
mark35
mark35
回复 @wsg : 刚开使用mysql都会觉得很不错,随着使用经验的增加、数据量的增加、OFFSET的增加,mysql会越来越慢最后成龟速~
wsg
wsg
回复 @蟋蟀哥哥 : 最开始的时候我在一亿数据基础上做测试时,也基本是平均一秒一万条数据能插进去了。--不过那时候没有这么多索引。----看来真的是索引的问题?--有点不甘心啊。
蟋蟀哥哥
蟋蟀哥哥
回复 @wsg : 我跑过千万级数据,没有这么慢呢。
wsg
wsg
回复 @蟋蟀哥哥 : 运行完了。用了3543秒。不算最慢,但是也慢得挺狠。 暂时没时间去再多测几次了。有其他的活儿又缠上来了。
wsg
wsg
回复 @wsg : 这次是把一百万件分成5万一次追加的。大概每五万用了300多秒秒。估算一下一百万应该是6000秒以上。
下一页
0
wsg
wsg
测试了很多很多次。现在的测试结果来看,时有时快有时慢,到底有可能是什么原因导致了这样的现象呢。
mark35
mark35
回复 @游侠 : 其他引擎能用么??
游侠
游侠
OLAP? MYSQL下不只这两个引擎的。
mark35
mark35
mysql估计无法适应你的需求。你可以看看innodb引擎性能如何。再不行就换数据库吧,免费的首推pgsql,商业的就多了~
蟋蟀哥哥
蟋蟀哥哥
回复 @wsg : 只是仓库的话,建议还是用nosql。innodB在百万级以后就爆慢,一秒才增加一千多行数据。测试过的
wsg
wsg
回复 @ZhiWei : 用InnoDB试过,比较了以后,还是MyISAM快,就换回来了(也可能是我配置了什么的没配得适合InnoDB?--不清楚)。
下一页
0
泡不烂的凉粉
泡不烂的凉粉
索引,也太长了吧。 
wsg
wsg
回复 @木人mr : 很可以参考!我也在考虑纵向分割的可行性。 然后,其他的像hash什么的,我还不知道是怎么用,去学一下。
泡不烂的凉粉
泡不烂的凉粉
有4个索引, 主键,不用考虑。 然后是int 和k1, 这个足足250多个字符,有办法压缩码?不如hash ? k2,k3 仍然如此。 如果索引内容比数据库本身都大, 还有什么意思。 另外 有一个联合唯一索引 int+k1(10) ,如果需要优化。那么最好在索引上优化,动态的根据索引生成简短的列入索引才行。 最根本的办法或许只有纵向分割,删除索引。 个人拙见,仅供参考。
wsg
wsg
嗯,我也在想是不是应该改改索引。----比如,什么地方“太长”了呢?
0
wsg
wsg
mysql估计无法适应你的需求。你可以看看innodb引擎性能如何。再不行就换数据库吧,免费的首推pgsql,商业的就多了~
回复 @mark35 : 你的回答挺有意思。从我查的资料来看(其实就是看网上的帖子),也是偏向于在数据量大的时候用Pgsql。不过我们公司有几个比我有经验的人却正在积极推进pgsql的mysql化过程。说是mysql比较快,方便好用。  抽时间我去试试pgsql。----虽然由于还不熟悉,用起来有些别扭,但是感觉pgsql有些地方挺奇妙的。
   ---不过,为什么说mysql可能无法适应我的需求呢。
0
吃土的汉子
吃土的汉子
mysql的主流引擎有好几个InnoDB在处理大数据量的时候表现比较出色,可以在安装时指定使用InnoDB引擎来提高效率。
mark35
mark35
回复 @千羽鸣 : 各有千秋,哪个都不中用~
吃土的汉子
吃土的汉子
回复 @wsg : 一堆引擎各有千秋,不过具体差别我是不记得了
mark35
mark35
回复 @wsg : 1、随着插入数量的增加会越来越慢,慢到令人发指的地步~ 2、如果在插入的同时有并发读取你就知道啥叫表锁了
wsg
wsg
可是,我实际测出来的插入效率,MyISAM要比InnoDB快一倍以上甚至有时候快了十几倍啊。
0
中山野鬼
中山野鬼
都是应用级的事情,好像和我没什么关系。哈。
wsg
wsg
回复 @中山野鬼 : 明白。O(∩_∩)O谢谢了。
中山野鬼
中山野鬼
回复 @wsg : 这种涉及数据库操作时间不确定的需求要动都是比较大的动静,和底层没关系。而是系统调优,不是两句话就解决的。所以变成了APP。至于C想不想学,这个你得看自己了。没有说会C的人就智商高这么一说。
wsg
wsg
你是?底层?搞C和C++的感觉都比较狠头脑敏捷。而且,要当黑客好像也必须会C吧。----上次我在网上听一个人说的。他说给他两千块钱就可以教我做黑客。我说我就对PHP会一些,他说那不行,必须得学C,他说他叫我的话,两三天就能教会我。---我想想我一直敬畏的C竟然两三天就能学会,就觉得压力比较大,就先搁下了。
返回顶部
顶部