sql - 实现 "Like"功能

标签 sql nosql sql-like

我需要创建一个包含“喜欢”的应用程序。这意味着具有唯一ID的人可以喜欢具有唯一ID的项目,但只能一次。该项目不能被不喜欢。我只提出了一个小表,其中包含 user_iditem_id 列,在插入之前我应该​​检查该用户是否已经喜欢该项目。在我看来,这不是完成任务的最佳方式,因为将会有很多(约 100 万)用户和很多项目,所以表应该相当大,这会影响搜索和插入速度。还有其他方法可以做到这一点吗?或者,如果我的方法适合这里,那么将此信息存储在数据库中的最佳方法是什么?目前我使用的是MySQL数据库,这里使用NoSql是不是更好?

最佳答案

首先要做的就是在两列(组合)上设置“唯一”约束,以便它们的组合是唯一的。不确定 MySQL 是否支持此功能,但 MSSQL Express 确实支持,并且您最多可以拥有 8 GB 的数据,因此 100 万用户还没有接近其限制 - 如果您的数据远远超过 100 万,则可以很好地扩展。您应该在 Liker 和 Like 上创建一个覆盖索引,并使其唯一。使用 80 填充插入将是即时的,查找也是如此。这是一个关系问题,因此关系数据库将优化任何非关系(NO SQL)数据库的速度和效率。你没有提到喜欢者和喜欢者是否是可交换的 - 我想不是

关于sql - 实现 "Like"功能,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15528577/

相关文章:

sql - Microsoft SQL 'not like' 与 <>

SQL 不区分大小写的 IN 搜索

sql - 在以下 CASE WHEN 语句中使用 SELECT AS 别名 - Spark SQL

sql - 我可以在存储过程中动态创建的临时表 (#temp) 上创建索引吗?

php - 从mysql背景理解mongodb结构

sql - 如何从 SQL 转换为 NoSQL/MapReduce?

mysql - 在非常小的列上进行全文搜索

sql - '-' 附近的语法不正确,使用来自 LoginUserRolePermission.zip 的脚本

mysql - SQL 仅选择存在多个关系的行

spring - 使用 Spring Data Neo4j 解析实体返回错误的实体类型