小编new*_*ewb的帖子

基于多对多关系匹配相似实体

我的数据库中有两个与多对多关系连接的实体.我想知道列出哪些实体最相似的最佳方法是什么?

我尝试使用intersect进行count(*),但查询花费的时间太长,无法在我的数据库中的每个条目上运行(大约有20k条记录).运行我写的查询时,CPU使用率跳至100%,数据库出现锁定问题.

这是一些显示我尝试过的代码:

我的表格看起来像这样:

/* 20k records */
create table Movie(
   Id INT PRIMARY KEY,
   Title varchar(255)
);

/* 200-300 records */
create table Tags(
   Id INT PRIMARY KEY,
   Desc varchar(255)
);

/* 200,000-300,000 records */
create table TagMovies(
    Movie_Id INT,
    Tag_Id INT,
    PRIMARY KEY (Movie_Id, Tag_Id),
    FOREIGN KEY (Movie_Id) REFERENCES Movie(Id),
    FOREIGN KEY (Tag_Id) REFERENCES Tags(Id),
);
Run Code Online (Sandbox Code Playgroud)

(这是有效的,但速度非常慢)这是我编写的用于尝试列出它们的查询:通常我也会使用top 1过滤并添加where子句来获取一组特定的相关数据.

SELECT 
    bk.Id,
    rh.Id
FROM
    Movies bk
    CROSS APPLY (
        SELECT TOP 15
           b.Id,
           /* Tags Score */
           (
            SELECT COUNT(*) …
Run Code Online (Sandbox Code Playgroud)

sql t-sql sql-server

6
推荐指数
1
解决办法
65
查看次数

标签 统计

sql ×1

sql-server ×1

t-sql ×1