数据库中标签系统的查找疑问

SourceID(int) TagID(int)

数据库的结构如上,要实现多个TagID的查找。即找到 TagID 为1,而且为2的SourceID,在百万级别的记录上怎么实现这个查找呢?
数据库为 SQL2005
数据内容为这样的

SourceID TagID
100000 1
100000 2
100001 1

SourceID 和 TagID 是多对多关系

感谢 摆渡浮桥 的回答。 索引是肯定有的。 加了索引可以让查找单条的速度变快,比如说 TagID = 1,这样的速度非常快。
但是涉及到组合查询速度就慢了,特别是组合查询里面的某一项结果集特别大的时候。

我现在用的方法是:
WITH arg1 AS(
SELECT * FROM tab WHERE TagID IN (1,2)
), arg2 AS(
SELECT SourceID,COUNT(*) as iCount FROM arg1 GROUP BY SourceID
)
SELECT SourceID FROM arg2 WHERE iCount = 2 ORDER BY SourceID DESC

这样的写法可以找出结果,但是如果TagID=1对应的结果数量太多(超过百万),就会导致查询速度非常慢。在我的电脑上需要超过1分钟才能得出结果

只要在TagID和SourceID上建索引,就能很快查到,哪怕是百万级的记录数量。

create index ix_table1_TagID_SourceID on table1(TagID asc, SourceID asc)

查询优化器会自动利用这个索引,很快就能找到对应的记录。学习一下索引的结构,你就会明白为什么在百万级的记录里也能快速找到对应的记录。

根据你举的例子,还可以在SourceID和TagID上也建立索引。

另外,如果中间结果的记录比较多,你可以不用CTE,改用临时表,并在临时表上创建合适的索引,性能会明显提升。
温馨提示:内容为网友见解,仅供参考
第1个回答  2010-11-27
SELECT *... 如果字段很多开销很大的,列出需要的字段就可以了
加了索引可以让查找单条的速度变快,比如说 TagID = 1,这样的速度非常快。
说明起作用了啊

数据库中的行和列到底说的是什么 等举个列子不
打开一张Execl表,标签为A、B、C、D...的是列,标签为1、2、3、4、5...的是行。每一列的内容是相同属性的,每一行内容是不同属性的的。

数据库中有标签,读到textarea里自动 过滤怎么办
如果只过滤,用string类的replace,textareaName.Text.Replace("","")就可以了

从mysql数据库中读取出的文本自带了很多标签跟样式,怎么才能把这些标签...
使用c标签输出,设置escapeXml="false"像这样:<c:out value="${news.content }" escapeXml="false"><\/c:out> 不过这个是jsp的方式。。。只是单纯的显示文本的话,用正则去除html标签

数据库中的数据读到网页上,空格被去掉了
把数据库读出的内容放到 标签中 如<%=rs(0)%>

怎样实现ACCESS数据库中的查找
1、首先打开ACCESS应用程序,并选择一个数据库打开。2、双击数据库中的一个表名,打开该数据表的数据表视图。3、在工具栏依次点击“创建”——“查询设计”,打开查询设计窗口。4、在查询设计中,点击“关闭”按钮,关闭对话框。5、再在“查询1”标签上,右击鼠标,弹出菜单中选择“SQL视图”。6、就...

从数据库中读取的HTML标签不解析怎么回事
可能是有一些符号如双引号,问号,冒号之类的没有处理好

论文查重只是查跟别人的论文重复吗
不是的,只要数据库中有检查。一般查重系统收录论文都是需要一个时间段的。打个比方:在zaojiance论文查重系统检测论文之后,它不会立刻就收录论文,但是具体要多长时间,这就需要区分是毕业论文,还是期刊论文了。再举个例子:就拿知网来说,它不是所有的论文都收录,对于本科论文,在论文的收录上更多的...

知识库管理系统都有哪些功能?
这样,用户可以根据分类和标签进行快速检索和筛选,提高查找效率。3. 知识搜索与检索:知识库管理系统提供了强大的搜索功能,用户可以通过关键词、标签、分类等方式进行检索,快速准确地找到所需的知识和信息。4. 知识共享与协作:知识库管理系统支持团队成员之间的知识共享和协作。用户可以共享自己的知识资源...

数据库中的表单和报表是什么意思啊?
数据库中的R ∞ W是什么意思 软件中你需要看数据,比如一个温度值,一个压力值或者什么电流什么的,这个数值需要放置到一个数据库变量中(寄存器)去,这个变量可以保存或者别的一大堆用处,比如你在画面上显示一个温度,那你就必须做个标签或者文本什么的输出,输出的就是变量!而这个变量的值也就是...

哥们,我也遇到了这样的问题,如何从数据库中,读出复选框的值,并让它在...
> 爱好:<input type="checkbox" name="checkbox" value="1" <%if instr(checkboxValue,"1")>0 then %>checked<%end if%> \/> 游泳 <input type="checkbox" name="checkbox" value="2" <%if instr(checkboxValue,"2")>0 then %>checked<%end if%> \/> 排球 <input type="checkbox...

相似回答
大家正在搜