请教大家一个问题: 我有一张海量数据表(字段在80个左右,记录在1000万以上), 主关键字是 【执行日期]】 +  【ID号】。以前,为了提高索引的查询速度,我就将【执行日期】字段设计成了整数类型(或长整数),将【执行日期】全部以数字的方式存储在数据库中,例如: 2009-09-26,在【执行日期]】字段中就是数字: 20090926。 现在,我觉得这样做不是很直观,所以,我还是想将【执行日期】的字段类型改回成“日期类型”。现在有以下几个问题,需要请教大家:【1】 在主索引中,将【执行日期】字段的类型从“数字类型”改回“日期类型”,是否会影响到主索引的查询速度,如果有影响,影响多大,大概会降低多少个百分点?【2】 大家是否建议在数据表的主索引字段中包含“日期类型”的字段 ?【3】 对于 主关键字是 【执行日期]】 +  【ID号】这种情况的海量数据表,大家在设计主索引时有什么好的建议 ?有哪些优化方案。【4】 如果,我将主索引改成 【年度】 + 【执行日期】+ 【ID号】,其中【年度】、【执行日期】都是“数字类型”,大家觉得这样的设计好不好?会不会更有利于数据的分类查询?我这边现在没有海量数据库的测试环境,所以没办法进行测试。请有兴趣参与讨论的朋友对以上几个问题进行一些模拟测试,把测试结果提供出来让大家讨论一下。也请数据库高手提供一些指导性意见。谢谢 !

解决方案 »

  1.   

    谢谢大家的讨论。不过,firecc05 和 SQL77 对于是否在主索引(主关键字)中是否加入【日期类型】的字段有不同的意见。不知道哪一位的建议更好。另外,我所说的将主索引改成 【年度】 + 【执行日期】+ 【ID号】的想法,是指【年度】、【执行日期】都是“数字类型”,比如,【年度】= 2009, 【执行日期】 = 927 其中,(927表示9月27日),不知这样的设计是否好呢?现在主要是我这边没有测试环境,所以,无法对这些情况做一个比对测试。
      

  2.   


    这样的不是很好 还不如直接从日期字段里面用datepart函数来截取
      

  3.   

    To fredrickhu: 把年份单独放一个字段是为了用户查询方便。如果直接从日期字段里面用datepart函数来截取,我觉得不方便,而且会影响查询速度。
      

  4.   

    To fredrickhu: 把【年份】单独放一个字段是为了用户查询方便。如果直接从日期字段里面用datepart函数来截取,我觉得不方便,而且会影响查询速度。
      

  5.   

    主关键字是 【执行日期]】 +  【ID号】?
    主键建议用int或是guid类型的。
    把执行日期和ID号分成两个字段分别加索引。ps:一个表最多可以有16个索引,但不是索引越多越好。
      

  6.   


    【3】 对于 主关键字是 【执行日期]】 +  【ID号】这种情况的海量数据表,大家在设计主索引时有什么好的建议 ?有哪些优化方案。【4】 如果,我将主索引改成 【年度】 + 【执行日期】+ 【ID号】,其中【年度】、【执行日期】都是“数字类型”,大家觉得这样的设计好不好?会不会更有利于数据的分类查询? 主关键字一般用一个唯一列标识,同时这列会自动建立索引,
    对于查询,一般将经常用到的查询条件建立索引,这样查询速度会更快。
    “主索引改成 【年度】 + 【执行日期】+ 【ID号】”没有必要,
    你查询经常用到日期,只要对日期建立索引就可以了,至于年度可以用datepart来取得
      

  7.   

    要设置为日期类型 id 如果是自动递增的 我的意见 id 设置为主键,执行日期 设置为聚集索引 ,速度我测试过最快的,我的数据库是500万以上的,经常需要查询某个时间范围的数据,而且按日期来排序也是最快的..
      

  8.   

    http://www.vckbase.com/document/viewdoc/?id=1307  这篇应该会有点帮助