日期:2014-05-18  浏览次数:20620 次

高手进来讨论性能
产品表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)

------解决方案--------------------
第一种的性能相对应该比较好一些 在关联字段加索引可以利用到
------解决方案--------------------
不要用 in 那是效率很低的
楼主应该根据需求,建索引,或者用分区,数据分开存放,这都可以提高速度
------解决方案--------------------
第一种方式,需要CataLogTable的ParentID和ID分别有索引
两种方式,需要ProductTable的CategoryID有索引

索引符合的情况下,性能差别应该不大

------解决方案--------------------
探讨
我是楼主:
分类表CataLogTable也就几百行固定数据,需要建立索引吗?