我现在有一个大表Product,有ProductName nvarchar(100),Support nvarchar(500),Company nvarchar(150),Class Nvarchar(100),ID int primary key,Content CLOB,这几个字段,但表中会存入上千W的数据,,目前我已经放了两百多W,,感觉查询ProductName、Support任意一个字段效果不是很理想,有时不到1秒,,有时要10多秒,,目前这些字段都有索引
表Product中ProductName、Support、Company、Class都有重复记录,,但ProductName、Company不可能两个字段都同时重复,,目前我已经把Company、Class建立了小表,是不是Support也要建立小表,但我考虑Support建立小表,不利于以后添加数据,Company、Class两个表都只有千来条数据,而Support会有Product表的80%数据,,即如果Product表有一千W数据的话,Support表会有800W数据,不利于我以后添加数据,数据我差不多每两天要insert一批数据,每次几百上千条,经常会对ProductName、Support、Company、Class这几个字段查询,如ProductName like ***,要求查询速度快,最好不到一秒,麻烦大家帮我分析一下

解决方案 »

  1.   

    ProductName like ***这样的语句,索引不生效。
      

  2.   

    回楼上的,,我知道like****不使用索引,,但有建立索引与不建立索引速度还是有一点点区别
      

  3.   

    按你所说 ProductName、Company不可能两个字段都同时重复,那么ProductName、Company即可以作为该表主键,其余的字段应该是ProductName、Company的附属描叙字段,怎么Support会有80%的数据呢?我的理解ProductName、Company是这商家的某种商品,那么Support啥意思?
      

  4.   

    从另外角度来看 ,表Product中有ProductName nvarchar(100),Company nvarchar(150), Support nvarchar(500)等字段。为了查询需要 ,你估计在ProductName,Company字段上面都加了索引或者复合索引,而模糊查询基本上用不到索引优势。我的建议ProductName,Company2个字段建立独立的小表,Product表中的ProductName,Company采用小表的代码,查询的时候关联。因为即使是你采用模糊查询,系统不利用索引而全表扫描,对性能损耗不大,因为这2个表比较小。Support我不知道啥意思,提不出啥建议。
      

  5.   

    楼主,我很想帮你,你能否靠诉我,在一个上千万的PRODUCT表中,字段TITLE不同值的记录数有多少?
    ----
    这个贴子跟楼主发的另外一张ORACLE的贴子有很大的联系。
      

  6.   

    几天没上原来有这么多人回复了,ProductName、Company、Support都是有重复的,没错,分别是产品名,公司名,简短说明;
    ProductName like ***做count(*)统计的时候会走索引
    最后特别感谢itpremier对我的帖子的关注
      

  7.   

    补充一下ProductName是有重复的,重复的数据不同,目前我打算建小表,作主键来试试,也是我最后可想的办法了
      

  8.   

    like的时候 %在后可以用索引  %在前不可以用索引
    例如  name like ‘刘%' --可以用索引
          name like ‘%刘' --不可以用索引
      

  9.   

    回楼上的我要对产品名like,,就不好分区了
      

  10.   

    我记得如果是like '****%'是会用到索引的。