【发布时间】:2012-10-19 04:08:42
【问题描述】:
背景
我目前正在重写一个搜索引擎...我最初是在几年前匆忙写的:)
今天,搜索包含约 5 个不同的内部业务对象/表:用户、组织、新闻头条等。因此,当用户在搜索框中输入 "The Quick Brown Fox" 时,他/她将获得每种类型的结果业务对象。
每个业务对象都有一个关联的存储过程:spSearchUsers、spSearchOrganizations 等。
问题
现在,对于每次搜索,我都会为每种业务对象类型多次调用每个存储过程(通过 BL -> 数据访问层)。例如,当用户搜索"The Quick Brown Fox"时,我将整个字符串原封不动地发送下来,但也将字符串拆分为每个空格,并单独搜索每个单词。
在这种情况下,每个存储过程被调用 5 次...对于单个搜索,总共有 25 个单独的数据库调用。我不觉得这是典型的......但它仍然运行得很快。每次搜索大约需要 4-5 秒。
我想创造什么
一个“主”存储过程,它获取整个搜索字符串 "The Quick Brown Fox",然后调用每个单独的业务对象存储过程(spSearchUsers、spSearchOrganizations 等),执行一点逻辑,然后返回1 个结果集。
所以 1 次搜索...1 个结果。
这可以使用存储过程、函数和/或用户定义的表类型来实现吗?
【问题讨论】:
-
您使用的是什么特定的数据库技术? MS、Oracle、MySql 等。
-
在您的 spSearchUsers、spSearchOrganizations 等调用中返回什么?
-
如果您的数据库和表结构允许这样做,那么您可以创建一个视图,将要搜索的字段、表的主键和其他所需信息放在一起。然后创建一个在视图上搜索的存储过程。
-
@seeker 基本上每个 sp 返回每个表的“SELECT *”。显然,每个表的列定义都非常不同:)
-
@Steve 我真的很喜欢这个主意...我没想到这一点(可能 b/c 我已经很长时间没有使用它们了。)谢谢
标签: c# sql-server search stored-procedures