首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >内连接与前端循环性能

内连接与前端循环性能
EN

Stack Overflow用户
提问于 2017-07-28 10:54:41
回答 2查看 1.8K关注 0票数 3

我想做点什么,如果我做得对的话。假设我在MySQL数据库中有两个表,其列如下

代码语言:javascript
复制
Members
-------------------------
id        name      status
-----     -----     -----
1         Mike      0
2         Alex      0
3         John      1
4         Jack     -1
代码语言:javascript
复制
    Status
    -------------------------
    id        text
    -----     -----
   -1        disapproved
    0         reviewing
    1         approved

现在,我需要以下列方式显示表“成员”的信息:

代码语言:javascript
复制
id        name      status
-----     -----     -----
1         Mike      reviewing
2         Alex      reviewing
3         John      approved
4         Jack      disapproved

一种方法是在两个表之间使用内部连接,另一种方法是从“成员”表中提取数据,并将其放入for-each循环并转换状态值。在后一种方式中,我根本不需要“状态”表。

我不知道哪条路更好。如果你需要更多的信息来帮助我,请告诉我。

提前谢谢。

更新

我想要做的每一个示例都是这样的,假设我已经从“成员”表中提取了数据。

代码语言:javascript
复制
foreach($data as $value)
    {
    if ($value['status'] == 0)
        $value['status'] = 'reviewing';
    if ($value['status'] == 1)
        $value['status'] = 'approved';      
    else
        $value['status'] = 'diapproved';        
    }
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2017-07-28 10:59:38

通常,您绝对希望通过MySQL数据库中的一个连接来实现这一点:

代码语言:javascript
复制
SELECT
    t1.id, t1.name, t2.text AS status
FROM Members t1
INNER JOIN Status t2
    ON t1.status = t2.id

在您的PHP代码中使用foreach循环来处理这个选项是不吸引人的,原因有几点。首先,您可能需要从两个表中获取所有信息,从内存和网络使用的角度来看,这都是浪费的。然后,即使在您输入了数据之后,仍然需要依赖PHP来执行连接。PHP并不是真正为内部数据库操作设计的,也不能使用类似索引之类的东西来加快进程。

票数 6
EN

Stack Overflow用户

发布于 2017-07-28 11:17:40

从性能角度看,在大多数情况下,使用主键关系的内部连接几乎不受任何惩罚。MySQL多年来一直在精确地优化这个用例--它被称为“关系数据库”,因为这正是它设计的目的。

在您给出的示例中,即使有数千万用户,性能成本也不可能在像样的硬件上衡量。

另一方面,您的代码示例显示了为什么这是一个糟糕的想法。

你有个打字错误。

代码语言:javascript
复制
 else
        $value['status'] = 'diapproved';        
    }

我想你的意思是“不批准”--你的数据库就是这么说的。

因为你在重复信息,所以你引入了bug的风险。一个必须修复错误的开发人员现在必须查看两个地方来修复错误--但是哪一个是正确的呢?数据库还是PHP代码?

当您引入状态2 - needs validation时会发生什么?现在,您必须在两个地方更新代码(并注意这些输入!)。

在某些情况下,性能改进是必要的。这几乎肯定不是一个;如果是的话,尝试通过优化查询来解决数据库中的问题。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/45371633

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档