产品表ProductTable 数据量较大,大约有2、30万条后续每天都同时在增大条数
        ProductTable表存储的字段中有一个字段CatalogID(产品分类ID),该字段存储的为 分类表CataLogTable的二级分类对应主键ID
        应用场景:用asp.net做产品列表页的时候,很多种查询条件中,有关根据产品分类ID查询产品信息时候,有两种查询方式:A。根据产品一级分类ID进行查询;B。根据产品的二级分类ID进行查询;
  【备注:在用asp.net跟数据层交互时我可以很容易的低耗费性能通过内存方式直接将当前查询条件的CataLogTable一级分类ID及其它的全部二级分类ID。】
===================================================================
       现在讨论SQL查询性能:
       方式1.关联ProductTable表和CataLogTable  表,然后根据二级分类ID查询条件 ON ProductTable.Catalogid=CataLogTable.ID
       Where ProductTable.CategoryID=@CataLogID
       根据一级分类ID查询条件为
       ON ProductTable.Catalogid=CataLogTable.ID
       Where CataLogTable.ParentID=@CataLogID
       方式2. 根据二级分类ID查询,跟方式1.一样,不需要关联CatalogTable
        根据一级分类ID查询
        单表,然后Where  ProductTable.Categoryid in (xx,xxx,xxxx)

解决方案 »

  1.   

    第一种方式,需要CataLogTable的ParentID和ID分别有索引
    两种方式,需要ProductTable的CategoryID有索引索引符合的情况下,性能差别应该不大
      

  2.   

    我是楼主:
       分类表CataLogTable也就几百行固定数据,需要建立索引吗?
      

  3.   

    1.分类表CataLogTable也就几百行固定数据,不需要建立索引
    2.ProductTable的 Catalogid 建立索引  筛选 (100万/几百) 效果应该还不错。
    3.方式一走索引的倾向高 ;方式二用in 很可能不会走索引,一般情况也是会走的。