php - 如何减少规范化数据库中的查询数量?

标签 php mysql database relational-database normalization

想象一个用于文章的表格。除了主要查询:

SELECT * From articles WHERE article_id='$id'

我们还需要其他几个查询来获取

SELECT * FROM users WHERE user_id='$author_id' // Taken from main query

SELECT tags.tag 
FROM tags 
  INNER JOIN tag_map 
    ON tags.tag_id=tag_map.tag_id 
WHERE article_id='$id'

以及更多关于类别、相似文章等的查询

问题 1:用 PHP 单独执行这些查询并处理给定结果的最佳方式是什么,还是有组合它们的方式?

问题 2: 在没有多对多关系的情况下(例如,由 tag_id、category_id、author_id 标识的每篇文章都有一个标签、类别、作者);最好(最快)的方法是从表中检索数据。

最佳答案

如果所有关系都是一对多的,那么您可以很容易地在一个查询中检索所有这些数据,例如

SELECT
    [fields required]
FROM
    articles a
    INNER JOIN
        users u ON a.author_id=u.user_id
    INNER JOIN 
        tag_map tm ON tm.article_id=a.article_id
    INNER JOIN
        tags t t.tag_id=tm.tag_id
WHERE
    a.article_id='$id'

这通常比单独进行三个查询更快,因为您的表已正确索引,因为 MySQL 就是为此而构建的!它将节省两次往返数据库的时间和相关的开销。

关于php - 如何减少规范化数据库中的查询数量?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8270093/

相关文章:

php - HTML5 Websocket 仅适用于本地主机

php - 当 HTML 表单字段之一提交为空白且所有询问列的默认值为 NULL 时,如何更新现有 MySQL 表?

mysql - 我的 MySQL 语句有什么问题?

php - 使用 PHP 和 MySQLi 导入 CSV 替代方法

java - 如何在 Android 模拟器上访问现有的 sqlite 数据库?

database - 添加新节点后 PostgreSQL Citus 碎片重新平衡 -> 连接到远程节点 localhost :5432 failed with the following error

mysql innodb 每个表一个文件,每个文件位于不同的目录中?

php - 如何在 Laravel PHP 中访问一个文件夹到另一个文件夹

php - 什么是 PHP 字符串是否以另一个字符串结尾的最有效测试?

php/sql-如何在变量上使用 LIKE 运算符从数据库中提取结果?