纵向拆分:
纵向拆分是只按照应用访问的频度,将表中经常访问的字段和不经常访问的字段拆分成两个表,经常访问的字段尽量是定长的,这样可以有效的提高表的查询和更新的效率。
对于经常访问的字段,即搜索高频词;不经常访问的字段,搜索频率较低的词。对于一个表,这样拆分对于大数据的搜索,是很有必要的。如:对于一个拥有海量数据的产品网站,必定有一个搜索功能,目前的搜索,较为简单,可能就是就是这对产品名称,或者产品类型,或者产品货号搜索。作为复合搜索的条件并不多,但是对于一个产品的相关属性却很多,如此,首先要分析客户的搜索信息的习惯,一般而言,大家都会从一个“大”的,“较模糊”的方面进行搜索。如客户对某个舞蹈培训感兴趣,可能会在网上搜索相关信息,他(她)很可能搜索 “舞蹈培训”, “ 某某地 舞蹈培训”,“哪哪哪舞蹈培训”等,然后嗖的一下,会有一大堆的选项。。。。客户习惯也是从模糊到明确的一个过程。等等等,呵呵,可能扯远了。其实,就是客户一般会在比较大的方面进行搜索信息。(个人的拙见)。这里“大”的方面,就是较高的频词,敏感词。如此,将这些经常访问的关键字,单独放置一个数据表中,无疑可以有效提高查询效率。同时,针对什么样的网站,类型,着重点,以及客户习惯,对症下药,以符合民意的“搜索”,无疑也会给站点加彩。
横向拆分:
横向拆分是指按照应用的情况,有目的的将数据横向拆分成几个表或者通过分区分到多个分区中,这样可以有效的避免Myisam表的读取和更新导致的锁问题。
目前,我发现横向拆分站点也不少,我们公司有个网站就是这样的,大约有500万个产品,采用的是横向拆分的。由一个表,衍生为10个或者更多表,数据表的压力,也会减轻,无论搜索,还是更新,效率肯定会很高。