表的字段名如下,包括8个字段:  
编号  名称  长  宽  高  表面积  体积  重量
1 abc   12   11  15   。。   。。   。。(数据举例)
我建了一个如下的结构的一个表,表描述的是一组长方体物体的相关属性数据,具体字段定义见表。表中的数据量大概在5000万行左右,我常用的检索有如下几种情况:1 按给定的长,宽,高,表面积,体积或重量中的一个属性的范围进行检索;2 按给定的长,宽,高三个属性的范围联合检索;3;按给定的表面积,体积,重量三个属性的范围联合检索;4 按给定的长,宽,高中任意两个属性的范围联合检索;5 按给定的表面积,体积,重量中任意两个属性的范围联合检索。总之,检索的大概是在这6个属性中可能只用一个,或用多个。请问:为了加快检索速度,我应该怎么在相应字段建立索引来提升速度?(是应该建立单字段的索引还是2个字段的联合索引,还是3个字段的联合索引?就是这几种情况的取舍问题?怎么才能达到我想要的效果最优?还是应该都建上?)请一定要帮小弟啊!谢谢了。

解决方案 »

  1.   

    1. 5000万行? 有采用分区表没?2. 该表是否经常插入。 索引能增加查询速度,但也会增加insert 的时间3. 如何建索引,是根据查询的SQL来的,楼主可以把常用的SQL 贴出来看看。 一般常用的相关列和主键都是要建索引的。 至于是否建联合索引,也是根据SQL语句来..4. 索引建的是否有效,也是需要测试的,有时候建了索引,查询速度反而会慢很多。 可以通过执行计划来分析SQL 加索引和没加索引的差别。
    ------------------------------------------------------------------------------
    Blog: http://blog.csdn.net/tianlesoftware
    网上资源: http://tianlesoftware.download.csdn.net
    相关视频:http://blog.csdn.net/tianlesoftware/archive/2009/11/27/4886500.aspx
    Q Q 群:62697716 
      

  2.   

    问一下,你这张表的update insert之类的dml多吗?另外,是什么样的系统? oltp还dss?返回的结果都大概多少/
      

  3.   

    我的建议:1.长,宽,高上建立联合索引
              2.表面积,体积,重量建立联合索引
    如果DML操作不多的话,执行第3步操作
              3. 宽,高, 体积,重量分别建立单独索引
     
      

  4.   

    我这个表采用了分区表,按编号分的区。基本上要一天执行一次插入操作,插入条数大概是10000条。
    常用的查询语句有:select * from table where 长 between 长1 and 长2 ;
                    select * from table where 宽 between 宽1 and 宽2 ;
                    select * from table where 高 between 高1 and 高2 ;
    select * from table where 长 between 长1 and 长2 and 宽 between 宽1 and 宽2 ;
    select * from table where 长 between 长1 and 长2 and 宽 between 宽1 and 宽2 and 高 between 高1 and 高2 ;就是长宽高三个属性的排列组合用的多,表面积,体积,重量的三个属性的排列组合用的少一点,但也会用到。
      

  5.   

    dml应该说是不算多啦,可以考虑多建几个索引。当然这个还是需要权衡的。毕竟还需要占用空间的。