php - 查看许多状态或创建一个表来存储所有状态

标签 php mysql sql join relationship

我有多个具有关系的表。 有时我需要进行连接只是为了检查 status = true 并且查询很大并且有点令人困惑......

想知道如何在大型项目中处理这种情况。

正在考虑创建一个包含父项和状态的表来对所有条件进行分组 - 在这种情况下只需要一个简单的查询来检查此关系状态是 true 还是 false。

像这样:

select *
from table
where table.parent in (select id from tableB where status = 1)
   or table.parent in (select id from tableC where status = 1)
   or table.parent in (select id from tableD where status = 1)

这是一个好方法吗? 从未测试过,不知道它在多大程度上可以成为最佳解决方案

谢谢

最佳答案

我有点困惑。您想重新设计您的数据结构,还是想优化您的查询?

如果没有明确的规范,我无法提供优化的数据结构。尽管这里是基于一些假设的一些优化建议。

  • 如果您的父 ID 在表格之间不重叠(即 tableb、tablec、tabled 没有共同的 ID),您可以将状态字段移至您的'table'表格。
  • 如果他们共享一些 ID,那么以前的方法将不起作用。那么你可以使用Denormalization 。将状态字段添加到'table'表中,并在任何状态发生更改时保持最新状态。

如果您想保留数据结构,那么您可以通过删除子查询并使用联接来优化查询。

在大多数情况下,JOIN 比子查询更快,而子查询更快的情况很少。

在 JOIN 中,RDBMS 可以创建一个更适合您的查询的执行计划,并且可以预测应该加载哪些数据进行处理并节省时间,这与子查询不同,子查询将运行所有查询并将所有数据加载到进行处理。

子查询的好处是它们比 JOIN 更具可读性:这就是为什么大多数 SQL 新人更喜欢它们;这是最简单的方法;但就性能而言,JOINS 在大多数情况下更好,尽管它们也不难阅读。

关于php - 查看许多状态或创建一个表来存储所有状态,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22752596/

相关文章:

javascript - 使用资源 Controller 的 store 方法通过 ajax 调用将数据插入数据库

更改 Div 样式的 Javascript 函数

mysql - 基于 Web 的 MySQL 界面比 phpMyAdmin 更好

mysql - 列索引的有效性是否与列数据的熵有关

sql - Oracle CASE 表达式文档问题

php - 如何使用 Symfony2 创建实体

php - Laravel 5.2 如何在同一行显示成员列表和他/她的组(一对多(或多对多)数据显示)

php - WHILE 中的 IF 语句不起作用

mysql - MySQL 中的条件语句

php - CakePHP:编号分页结果