请教一条记录同属多个分类的高性能实现方法!在线等

爱我的人请呼吸 2013-05-27 05:56:06
数据库中有个产品表。另外有个分类表。主要结构如下

产品表
————————————
id p_name p_class
————————————
1 产品1 1,2,3
。。。。。以此类推

分类表
————————————
id className
————————————
1  分类1
2  分类2
3  分类3

————————————————

就如上面所列出的,假如产品1同属于1、2、3这三个分类。在产品一的分类字段就写入1,2,3将分类ID用分隔符隔开。查询某分类下的产品的时候就用like模糊查询分类ID。
之前数据量小,分类也不多,没感觉到性能问题。

现在要接手一个程序,分类表多达上千条记录。而一个产品所属的分类了可能达到几十上百。这样的话产品的分类字段会很大,而且对这么多数据模糊查询消耗也太大了。

请教各位前辈大大,这种情况下有没有什么其它方式实现一个产品对应多个分类的?感激不尽!
...全文
236 6 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
  • 打赏
  • 举报
回复
谢谢楼上各位。 难道类似这样的需求,表结构就只能这样么?有没有其它方法可以让查询效率更高一些的。 主要是查询某分类的产品的时候不用like '%ClassID%'这样的模糊查询
human_2000 2013-05-30
  • 打赏
  • 举报
回复
首先你的分类长度是固定的嘛?如果不是固定的 譬如like '%1%', 那么分类1,11,121,1453都可以查出来 我遇到这种情况都是这样实现的,效率你测试一下 select distinct a.名称 from 产品表 a cross apply f_split(a.xguserid,',') where a.分类编号='1000' create function [dbo].[f_split](@SourceSql varchar(8000),@StrSeprate varchar(10)) returns @temp table(a varchar(100)) --实现split功能 的函数 as begin declare @i int set @SourceSql=rtrim(ltrim(@SourceSql)) set @i=charindex(@StrSeprate,@SourceSql) while @i>=1 begin insert @temp values(left(@SourceSql,@i-1)) set @SourceSql=substring(@SourceSql,@i+1,len(@SourceSql)-@i) set @i=charindex(@StrSeprate,@SourceSql) end if @SourceSql<>'\' insert @temp values(@SourceSql) return end
Leon_He2014 2013-05-28
  • 打赏
  • 举报
回复
在产品一的分类字段就写入1,2,3将分类ID用分隔符隔开 这种存储方式查询起来很麻烦。 建议以 id p_name p_class ———————————— 1 产品1 1 2 产品1 2 3 产品1 3 的方式存放
铁歌 2013-05-28
  • 打赏
  • 举报
回复
多设计出一个分类表,然后产品表的分类ID需要外键参照到分类表,然后建立好索引,查询访问的时候通过键连接,走索引还是比较快的。
--分类表
create table pclass 
( 
	id int identity(1,1) primary key,
	comments nvarchar(20) 
)

go
--products表
create table products 

( 
id int identity(1,1) primary key ,
pclass_id int FOREIGN KEY     REFERENCES pclass(id) 
)

--检索products 和class
select p.*,c.comments  from products p inner join pclass  c on p.pclass_id=c.id
路伊阑珊 2013-05-27
  • 打赏
  • 举报
回复
分类表多达上千条记录。而一个产品所属的分类了可能达到几十上百 这点数据不至于有的性能问题吧 可以吧SQL贴出来看看
  • 打赏
  • 举报
回复
在线等,各位前辈多多指点啊

22,301

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server 疑难问题
社区管理员
  • 疑难问题社区
  • 尘觉
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧