和大家分享一个提高大数量数据查询速度的简单方法。实际工作中的解决方案,有一定的局限性,希望能给遇到类似情况的兄弟姐妹一些启发。
案例:
数据库中有一个主要的数据表,叫它MasterTable,结构如下,数量在10亿条以上,有30列左右。系统中大多数的查询都会与之有关,由于数据量巨大所以效率很低。
解决方案:
生成临时表如TemporaryTable1,TemporaryTable2等,结构如下,这些表根据数据查询的需要只包含MasterTable中的几列,2小时(业务需要)以后将这些临时表Truncate一次,重新产生数据。这样可以大大提高查询的速度。
MasterTable
-----------------------------
| Col1 | Col2 | Col3 | …… |
-----------------------------
| Data | Data | Data | …… |
-----------------------------
TemporaryTable1
---------------
| Col1 | Col2 |
---------------
| Data | Data |
---------------
TemporaryTable2
---------------
| Col1 | Col3 |
---------------
| Data | Data |
---------------
当然这种解决方法有局限性,就是使用的数据并不是最新的数据,准确点说应该是前2小时以内的数据,但是如果满足业务的需要那么也是可以接受的。最后想提一下,业务需求的确定很重要。顺便提一句,重要数据一般会保存10年不删除,最长的应该是15年(法律规定),国外有些是要求7年。