关于MYSQL的定长表和变长表的测试

最近再设计数据库表结构,于是想到了定长表和变长表,网上经常可以看到定长表和变长表的对比,比如说定长表更快,更容易恢复,但是更占用磁盘空间等等。。。由于不太了解这个快到底能有多快,所以就做了一个小小的试验,数据库的插入没有使用存储过程,直接使用了PHP一条条的插入,然后计算每次的插入时间,最后计算平均插入时间。

首先假定两个表A(变长)和B(定长),这两个表都时根据实际业务需求设计的,不同的时A都使用VARCHAR,B都使用CHAR来存储字符串。

第一步:向两个表中各插入100万条数据

结果:

A、总共耗时:18.7943580151秒, 平均每次插入耗时:0.000187943580151
B、总共耗时:19.0936541557秒, 平均每次插入耗时:0.000190936541557

第二步:检查两个表的大小:

结果:

A、记录数1400000,大小800MB

B、记录数1200000,大小1.5G

第三步:测试查询速度(找一个没有索引的列进行ORDER BY)

结果:

A、显示行 0 - 29 (1,415,691 总计, 查询花费 13.6024 秒)

B、显示行 0 - 29 (1,200,000 总计, 查询花费 23.0463 秒)

测试只是简单的使用了INSERT 和 无索引的 SELECT,结果可见,INSERT上定长表和变长表差不多,效率并不见优势;查询速度长定长表在记录数少的情况下反而比变长表多用10秒钟;最后表大小差了将近一倍,这个消耗时不值得的。。。

可能测试太过简单,环境也不太靠谱,但是也应该具有一定的参考价值,如果字段不能确定时否为定长,则最好使用变长类型。。。

Published: September 27 2011

blog comments powered by Disqus