传说中的千万数据量优化

作者 : admin 于 2008年12月30日, 22:10:51
2008
12-30

平时看别人招聘,动不动来个“有千万数据量优化经验”。我还的确没有这个经验,中小网站来个几万几十万的数据就了不得,一些涉及数据多的顶多也来个百万,因为超百万我就分表了,而且设计的时候尽量使用主键索引,避免使用模糊搜索和一些复杂的搜索。
基本百万数量级以下的简单应用,一般的服务器没什么问题,只要程序够不垃圾就行。
今天突然奇想,尝试下千万数据什么样子,花半个小时生成了一堆随机的数字,一千万整,当然还有其他的一些数据,主要测试从千万级的数据中捞少量数据是什么样子。
我用的MSSQL2005,使用存储过程生成数据,半个小时,Mysql没实验过。结果,从千万数据用where捞几万条数据,用单一的where条件,果然很慢,能达到20几秒。后仔细查看索引和语句,发现没有很好的索引供sql语句使用,根据where语句建立索引,速度提升到10秒左右。因为只是取出几个字段,后又想使用覆盖索引,加上那几个字段,速度大为提高。
经过跟踪测试,在覆盖索引的使用后,取数据已经达到了相当迅速,但大量的时间消耗在了数据库连接和数据的传输上。因为本系统必须操作大量数据,而拆分数据后又增加了创建数据库连接的成本,速度反而变慢。其实,只要php不超时,已经达到了可用的程度。
总结:索引这玩意真的不错,但设计数据表要尽量简单,简单不是指字段简单,而是使sql语句取数据简单,必要时中间要增加矢量的冗余数据,用空间换取时间。