1 MySQL不同版本间的性能比较
不知道大家初次见到MySQL是何种感觉,反正我见到MySQL3.23时很不以为然,没有视图,没有事务,没有触发器,没有子查询,没有存储过程,没有……,懒得提了,但是要说是今天MySQL5.0的能力已经得到了很大的提升,至少上面说明的这些问题,MySQL已经解决了大部分了。
1.1 比较的版本
选择比较的版本是3.23版本,4.0版本, 4.1版本,5.0 Beta版本。其中3.23版本为MySQL的最早的可用版本,XXX等产品也一直在使用,4.0为MySQL支持查询缓冲的版本,也有很多产品使用。MySQL 4.1和5.0版本为较新的版本,支持一些新的特性。
MySQL的安装可以使用源代码自己编译,也可以使用MySQL官方提供的编译版本,相对而言官方提供的静态编译版本比较容易安装(动态编译的版本要依赖glibc库版本)。
另外MySQL提供从4.1以后的提供了Intel C++ Compiler编译的版本,据称Intel C++ Compiler的版本比GCC编译的版本速度要快20%以上,所以也找来看看。
从下面这个表,我们也可以看出MySQL发展史和各个版本的基本特点,可以看出MySQL从一个过家家类型的数据库开始越来越像一个成熟的商用数据库了。
表1 测试的版本
|
说明 |
版本特点 |
MySQL 3.23.51 |
公司内部分产品使用的版本, |
为自己用gcc编译 |
MySQL 3.23.55 |
官房网站下载的3.23的gcc编译static版本 |
3.23的一个成熟版本 |
MySQL 4.0 gcc |
官房网站下载的gcc编译static版本下载4.0版本,公司相当产品使用 |
提供了查询Cache 提供了FULLTEXT的文本检索索引 提供了嵌入式的MySQL InnoDB开始成为内建引擎,InnoDB支持事务,外键,操作行锁定等特性 可以动态调整MySQL的某些运行参数, ”SET” 部分功能性能提升,如批量插入, 功能增加,如TRUNCATE,UNION查询等 |
MySQL 4.1 gcc |
官房网站下载的gcc编译static版本 |
提供的新特性 子查询的功能,SELECT的嵌套 使用MYSQL_STMT加快了C/S通讯速度, 增加了一些新函数 |
MySQL 4.1 icc |
官房网站下载的intel c++ 编译4.1版本,要intel的动态库支持 |
Intel C++编译的版本号称速度要快20%以上 |
MySQL 5.0 gcc (beta) |
最新的MySQL版本,官房网站下载版本 从这个版本开始MySQL开始真正像一个商用数据库了。 MySQL5.0的正式颁布已经发布 |
提供很多成熟商业数据库的特性, 视图,以及相关一些管理功能 存储过程,光标 触发器,已经支持时间和事件触发 VARCHAR长度的增加 InnoDB支持分布式事务 支持一些新的存储引擎(ARCHIVE,只支持插入和查询操作,FEDERATED, 访问远程数据) |
1.2 测试的方法和结果
分别,插入,查询,修改,删除,1000000,5000000,10000000,条记录。尝试MySQL在不同的记录数量级别下的表现。表不进行压缩存储。
测试环境使用使用MyISAM数据库引擎,配置中比较关键的参数为,对于4.0后的查询版本使用查询Cache。同时为了模拟真实环境,记录二进制日志。
使用的关键参数为:
set-variable = key_buffer_size= 384M
set-variable = query_cache_size= 384M
set-variable = sort_buffer_size = 1M
set-variable = read_buffer_size= 1M
set-variable = table_cache=256
1. 测试采用脚本分组进行,每次测试前删除掉原来的数据,同时删除掉二进制日志(可能flush-log一下更好)。每次操作前sleep 20秒。
2. 插入记录为插入0-N条记录,每次单条插入。
3. 查询为每次查询一条的N次查询。遍历所有的记录。查询使用主键作为查询条件。查询操作完成转储结果集的操作。
4.