面试题目,这个大表如何设计呢?他说一个通讯录有,3000多万条记录,有好几个大字段,text或者varchar比较长的,总表有50几个字段,问我如何设计表结构,让这个表的dml以及查询操作效果最高。然后还会从移动手机端更新到数据库服务器,如何让同步更新最快?我说我说的是分区分表,他摇了摇头。然后我说建立组合索引,全文检索,他也摇了摇头。然后我再说建立cluster,用集群来操作,他也摇了摇头。
大家你们说该怎么办呢?

解决方案 »

  1.   

    只是1个表吗?感觉应该将比较长的字段分表建立,通过KEY字段连接
    给出的信息不是很完整
      

  2.   

      如果更新效率不高,用集群缓存去重新组织 表的数据结构吧。
      比如lucene 再高一点用memcached redis等。
      
      也可以读写分离。
      

  3.   

    先问他现在表 的查询sql是什么,才能看出有没有优化余地。
      

  4.   

    本帖最后由 Mr_Bean 于 2011-10-13 09:23:25 编辑
      

  5.   

    1.有好几个大字段,text或者varchar比较长的-->可以放在单独一个表中
    2.总表有50几个字段-->常用字段放在一个表中,不常用字段放在另一个表中
      

  6.   

    3000多万条记录,有好几个大字段,text或者varchar比较长的,总表有50几个字段,问我如何设计表结构,让这个表的dml以及查询操作效果最高。从通信录来看,更新不会很频繁,然后是text、varchar等比较可变长度,用NoSql是否更加合适?  
    一点小想法,我也不太懂nosql,哈哈。。
      

  7.   

    1、已知条件不够,比如哪些字段需要查询,哪些经常查询?text、nvarchar的长字段是否需要查询?可否分成多个表?具体有哪些字段等等。2、50个字段确实不算多,没什么可怕的,3000多万似乎多了一点,但是也没啥好怕的。3、text、ntext字段没有必要分离到另一个表里面,因为其大小只有16个字节!16个字节是如何放下很多很多的内容的?当然是放在另一个地方了,16个字节的空间只是记录了这个地方的“地址”。其实就是相当于分到了另一个表里面。4、nvarchar很长的字段,其实直接转换成ntext的好了,和分到另一个表里的效果也差不多。如果不涉及到计算的情况下。5、“让这个表的dml以及查询操作效果最高” dml是啥?6、其实查询的效率是非常高的,慢的是把符合条件的记录给提前出来,再拼接成html,这个速度是远远慢于纯粹的数据库查询的。7、数据多了,就要分页显示,分页的时候如何高速?主要看是否能够利用索引,能够利用索引速度就快,就是这样!
      

  8.   

    你可以直接回答他:sir,我认为你脑子有问题
      

  9.   

    显然要进行分表。BLOB/CLOB字段以及那些不常用的字段进行分离。这样才会提高效率。
      

  10.   


    BLOB/CLOB字段以及那些不常用的字段进行分离,blob字段如何分离呢,请教一下。
      

  11.   

    该摇。
    要速度快,首先想到的应该是内存数据库。 是oracle的话可以直接放buffer_pool。
      

  12.   

    3、text、ntext字段没有必要分离到另一个表里面,因为其大小只有16个字节!16个字节是如何放下很多很多的内容的?当然是放在另一个地方了。问下,同一张表下,text和ntext字段是放在哪个地方去了呢?
      

  13.   

    昏,這考題沒什麼,只是想了解你對大數據的處理能力,50多個字段3千萬筆都不算多,我們處理的比這多了幾倍,
    但是要求在一秒之間要完成一次transaction.看了很多人亂回答,嘿...都是不合格的dba
      

  14.   

    一个表,300多个字段。Oracle 10g。
      

  15.   

    虽然只说了这些信息,但是你可以从现实中遇到的真实查询情况,一一分析解说啊,用索引、存储、事务、视图等不同功能事先查询信息,而且一下子查询所有的新消息也是不可能的,对于一些虚拟主机来说也容易造成CPU超限。想到什么说什么,把自己当做要实现这些功能的客户。
      

  16.   


    sql server存储引擎 之类的书  写的明明白白啊