急!高分求教。一个表有10w条记录,如何设计才能使查询时效率比较高?

时间:2021-12-27 23:25:12
环境:Asp + sqlserver2000

这个表(Product)的 PK 是 标准商品分类码+xxx
标准商品分类码是八位,头两位是表示一个大类,次两位是子类,5/6位是子类的子类,7/8位是5/6位的子类。xxx表示商品的顺序号。

如何设计数据库,才能使查询product的效率比较高?
查找一个product的时候,如果从10w条记录中直接查找,速度是否会受到影响?所以我考虑先让使用者首先进入大类中选择,从大类中选出子类,再从子类中选择出子类。这样范围缩小很多,从数据库中查找一个product的效率是否提高了一些?

各位还有其他什么好方法吗?
谢谢!

11 个解决方案

#1


你的表设计不好,应该是用复合主键:

大类编号  子类编号  子类的子类 子类的子类的子类 顺序号
几个字段构成复合主键


或者直接用树形结构(建议用这个)
产品表
编号  名称  上级编号

而product中用编号与产品表关联

#2


该回复被版主删除

#3


尽量用编码来查询

#4


将产品基本信息,与数据分开
这样在检索时,可以先从产品基本表中,检索出某类产品所有的子编号
再与product关联查询,这样的效率就高很多

因为产品基本信息表的数据量无疑少很多,查询速度快,结果集再与product关联查询,可以充分利用索引,不像你原来的设计方案,基本上利用不了索引.

#5


谢谢 zjcxc(邹建) 

将产品基本信息,与数据分开
——这句话不大理解,是否是这个意思:比如一个product有很多基本信息,比如价格/重量/宽度/长度/等等,把这些基本信息另外建一个表ProductDetail,而Product表只包含一些关键数据比如ProductID,ProductName?

#6


--这样说吧

产品类别表
编号(PK)  名称   上级编号(为0表示是最*)


产品基本信息表
编号(PK)  类别编号   名称   单位    规格....


BOM表
编号  子编号

#7


事实上,标准商品分类码,是全世界的一个商品分类标准,改动不大
如果根据你的分类原则,需要把这个8位的编码拆开来。这样如果查找一个商品的分类码,必须不断查找它的上级编码,这样的话,是不是反而累赘了?

另外,上面的BOM表是什么意思?

#8


商品编码是你自己定义的嘛,编码规则你可以照原来的设计

我只是加上一个商品分类表,这样在分类检索商品和分类统计时,就可以大大提高处理效率.因为它不需要从10W的数据中去拆分类别出来

#9


如果你的类别就上千种而已,你可以比较一下,从上千条记录中生成一个要检索的编码序列,和从10W条数据中去拆分出一个要检索的编码序列,你说谁的效率高?

#10


建立索引

#11


学习...
向 zjcxc(邹建) 致敬

#1


你的表设计不好,应该是用复合主键:

大类编号  子类编号  子类的子类 子类的子类的子类 顺序号
几个字段构成复合主键


或者直接用树形结构(建议用这个)
产品表
编号  名称  上级编号

而product中用编号与产品表关联

#2


该回复被版主删除

#3


尽量用编码来查询

#4


将产品基本信息,与数据分开
这样在检索时,可以先从产品基本表中,检索出某类产品所有的子编号
再与product关联查询,这样的效率就高很多

因为产品基本信息表的数据量无疑少很多,查询速度快,结果集再与product关联查询,可以充分利用索引,不像你原来的设计方案,基本上利用不了索引.

#5


谢谢 zjcxc(邹建) 

将产品基本信息,与数据分开
——这句话不大理解,是否是这个意思:比如一个product有很多基本信息,比如价格/重量/宽度/长度/等等,把这些基本信息另外建一个表ProductDetail,而Product表只包含一些关键数据比如ProductID,ProductName?

#6


--这样说吧

产品类别表
编号(PK)  名称   上级编号(为0表示是最*)


产品基本信息表
编号(PK)  类别编号   名称   单位    规格....


BOM表
编号  子编号

#7


事实上,标准商品分类码,是全世界的一个商品分类标准,改动不大
如果根据你的分类原则,需要把这个8位的编码拆开来。这样如果查找一个商品的分类码,必须不断查找它的上级编码,这样的话,是不是反而累赘了?

另外,上面的BOM表是什么意思?

#8


商品编码是你自己定义的嘛,编码规则你可以照原来的设计

我只是加上一个商品分类表,这样在分类检索商品和分类统计时,就可以大大提高处理效率.因为它不需要从10W的数据中去拆分类别出来

#9


如果你的类别就上千种而已,你可以比较一下,从上千条记录中生成一个要检索的编码序列,和从10W条数据中去拆分出一个要检索的编码序列,你说谁的效率高?

#10


建立索引

#11


学习...
向 zjcxc(邹建) 致敬