php - SQL JOIN vs LIKE(数据存储在行中而不是另一个表中)

标签 php mysql sql join inner-join

我做了一些研究,但未能找到明确的答案。

在性能方面更好。

注意:只有 10 个可能的标签,最大长度为 160 个字符(如果全部选择)。


ONE table 包含 3 列:id、stuff、tags ... 其中标签列将是一个 varchar

并像这样查询:SELECT * FROM table WHERE tags LIKE %tagname%

两个表:

  • tableA columns = id, stuff

  • tableB columns = id, tag

然后像这样查询:SELECT * FROM tableA A INNER JOIN tableB B ON A.id = B.id WHERE B.tag = 'tagname'


插图——

tableA 中的行看起来像:123 |一些数据

tableB 中的行看起来像:123 |标记名

我只是想问如果没有很多标签,就性能而言,将标签存储在一行中还是在单独的表中更好。

最佳答案

What is better, in terms of performance.

Donald Knuth 曾说过“过早的优化是万恶之源。”据了解,据了解,他是在表达人们通常不应该为 构建东西性能,而不是正确性,然后才进行优化以使应用程序符合性能要求。

您的性能要求是什么?有些人可能希望最小化内存使用;其他人可能希望最小化 CPU 时间;其他人仍然可能通过“性能”来表示完全不同的东西。

即使假设您的意思是“哪个操作最快”,答案通常取决于各种因素,包括磁盘技术、存储引擎、索引设计、表大小...

那么,你应该怎么做呢? 正常化直到疼痛为止;去规范化直到它起作用。

您的第一种方法违反了 1NF .不要这样做,除非你有一些压倒一切的理由(你几乎不会这样做)。

关于php - SQL JOIN vs LIKE(数据存储在行中而不是另一个表中),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22938989/

相关文章:

c# - 从 SQL 表中删除字符

php - MySQL存储过程或函数以特定格式返回人名

php - 获取数组第一项的最快方法是什么?

php - 在 PHP 中设置管理区域的最安全方法是什么?

php - 更新时 MS Access 错误 "Operation must use an updatable query"

mysql - 在mysql中用数学公式排序

php - 如何在服务器上动态创建数据库?

mysql - Rails:通过迁移添加唯一索引会抛出 Mysql2::Error: BLOB/TEXT

mysql - 无法执行 GROUP_CONCAT

sql - 在 Access 子报告中使用 top 子句