每个“产品”最多可以有10000个“细分”行。这些细分受众群具有一个针对每种产品(1、2、3、4、5,…)从1开始的排序列,以及一个值列,该列可以包含诸如(323.113、5423.231、873.42、422.64、763.1,…)。
我想确定给定细分子集的产品的潜在匹配。例如,如果我按正确的顺序有5个细分值,那么如何在细分表中某处有效地找到所有具有相同顺序的5个细分的所有产品?
假设这样的表:
CREATE TABLE Products
(
ProductId int not null
constraint PK_Products
primary key
,Name varchar(100) not null
)
CREATE TABLE Segments
(
ProductId int not null
constraint FK_Segments__Products
foreign key references Products (ProductId)
,OrderBy int not null
,Value float not null
,constraint PK_Segments
primary key (ProductId, OrderBy)
)
接下来,在临时表中设置搜索数据:
CREATE TABLE #MatchThis
(
Position int not null
,Value float not null
)
对于N个搜索对象,必须像这样填充
First item 0 <value 1>
Second item 1 <value 2>
Third item 2 <value 3>
...
Nth item N-1 <value N>
现在设置一些重要的值。(这可以塞入最终查询中,但是这种方式使它更易于阅读,并且可能会稍微提高性能。)
DECLARE
@ItemCount int
,@FirstValue float
-- How many items to be matched ("N", above)
SELECT @ItemCount = count(*)
from #MatchThis
-- The value of the first item in the search set
SELECT @FirstValue = Value
from #MatchThis
where Position = 0
然后,这只是一个查询:
SELECT
pr.Name
,fv.OrderBy -- Required by the Group By, but otherwise can be ignored
from #MatchThis mt
cross join (-- All Segments that match the first value in the set
select ProductId, OrderBy
from Segment
where Value = @FirstValue) fv
inner join Product pr -- Just to get the Product name
on pr.ProductId = fv.ProductId
inner join Segment se
on se.ProductId = fv.ProductId
and se.OrderBy = fv.OrderBy + mt.Position -- Lines them up based on the first value
and se.Value = mt.Value -- No join if the values don't match
group by
pr.Name
,fv.OrderBy
having count(*) = @ItemCount -- Only include if as many segments pulled for this product/segment.OrderBy as are required
我坚信这是可行的,但是我现在没有时间详细测试它。为了优化性能,除了指示的主键之外,您还可以在Segment.Value上添加常规索引
当数据项存储在诸如列表的集合中时,我们说它们具有线性或顺序关系。 每个数据项都存储在相对于其他数据项的位置。 在 Python 列表中,这些相对位置是单个项的索引值。由于这些索引值是有序的,我们可以按顺序访问它们。 这个过程产生我们的第一种搜索技术 顺序查找。 Figure 1 展示了这种搜索的工作原理。 从列表中的第一个项目开始,我们按照基本的顺序排序,简单地从一个项移动到另一个项,直到找到我们
主要内容:顺序查找算法的实现思路,顺序查找算法的具体实现顺序查找算法又称 顺序搜索算法或者 线性搜索算法,是所有查找算法中最基本、最简单的,对应的时间复杂度为 。 顺序查找算法适用于绝大多数场景,既可以在有序序列中查找目标元素,也可以在无序序列中查找目标元素。 顺序查找算法的实现思路 所谓顺序查找,指的是从待查找序列中的第一个元素开始,查看各个元素是否为要找的目标元素。 举个简单的例子,采用顺序查找算法在 {10,14,19,26,27,31,33,3
主要内容:顺序查找的实现,顺序查找的性能分析,总结通过前面对静态 查找表的介绍,静态查找表即为只做查找操作的查找表。 静态查找表既可以使用顺序表表示,也可以使用链表结构表示。虽然一个是数组、一个链表,但两者在做查找操作时,基本上大同小异。 本节以静态查找表的顺序存储结构为例做详细的介绍。 顺序查找的实现 静态查找表用顺序存储结构表示时,顺序查找的查找过程为:从表中的最后一个数据元素开始,逐个同记录的关键字做比较,如果匹配成功,则查找成功;反之,如
问题内容: 有没有一种有效的方法来查找指定的PID,而无需遍历列表? 问题答案: 使用以下其中一项有什么问题?
我目前拥有以下内容(使用我从上面的代码片段中获得的): 基本上,我首先以快速但近似的方式找到可以是一元的列,然后更详细地、更慢地查看“候选”。 我不喜欢它的一点是:a)即使使用近似预选,它仍然相当慢,运行需要一分钟,尽管此时我只有大约70列(大约600万行);b)我使用和神奇的常量(不计数,因此而不是)。由于我不确定在内部是如何工作的,所以我有点担心不是一个特别好的常量,因为该函数可能会估计dis
问题内容: 假设我们有两个连续的整数序列缺失,并且缺失的元素位于第一个元素与最后一个元素之间。我确实写了完成任务的代码。但是,我想尽可能地使用更少的循环来提高效率。任何帮助将不胜感激。当我们必须找到更多的缺失项(例如接近n / 4)而不是2时,情况又如何呢?我认为我的代码应该是高效的,因为我早先退出了循环? 问题答案: 假定L是没有重复的整数列表,则可以推断出,当且仅当且仅当且仅当且仅当且仅当且仅