新手学习MySQL,LinuX下建表如下:NAME(CHAR32)、STR1(CHAR32)......STR10(CHAR32)选择NAME域做Primary索引;
当采用顺序加入、查询、修改或删除(如Name依次取取Id000000、Id000001......Id199999)时速度可以,大约30s~40s左右可以完成20万条;可是当打乱顺序访问(Name随机取IdXXXXXX)时,性能下降很厉害,一般下降3~5倍,偶尔也有下降将近10倍的,感觉是和索引乱序使用有关,但如何优化呢?使用的是Linux,引擎是MyISAM,客户端采用C API访问;
试过将索引域改为BigINT,问题依旧,自己加了Linux的取操作时间打印,最慢的结果竟有1s多才返回的!
当采用顺序加入、查询、修改或删除(如Name依次取取Id000000、Id000001......Id199999)时速度可以,大约30s~40s左右可以完成20万条;可是当打乱顺序访问(Name随机取IdXXXXXX)时,性能下降很厉害,一般下降3~5倍,偶尔也有下降将近10倍的,感觉是和索引乱序使用有关,但如何优化呢?使用的是Linux,引擎是MyISAM,客户端采用C API访问;
试过将索引域改为BigINT,问题依旧,自己加了Linux的取操作时间打印,最慢的结果竟有1s多才返回的!
建议你看看数据结构中B-树以及B+树的基本算法。
show index from xxxx;
explain select ....
但Modify和Delete的确影响很大,Modify大约慢了6倍,Delete则大约慢了10倍!
将全部20万条数据换为Memory引擎加入内存后,再访问就速度飞快;最后来了一把彻底的,将机器上的Linux升级到2.6.29,文件系统由Ext3换为Ext4,再测试,发现乱序性能竟然好得很,不仅恢复到原先的情况,某些情况下甚至比顺序稍好,看来Ext3支持MySQL是不行啊!