繁体   English   中英

使用PHP循环执行SQL查询

[英]SQL Queries in loops with PHP

因此,我最近接手了内部内容管理系统的维护,而数据库优化并不是我真正的专长。

无论如何,当我查看代码时,有几件事掉到了我的眼前。

php代码有点“意大利面加肉丸”,几乎没有注释。

但是最大的事情是:据我所知,原始程序员决定放弃表联接完全包含在数据库代码中(隐式和显式)。

例如,以下是显示页面列的过程:

从数据库中获取元素列表对于每个元素,调用一个子例程以检查显示权限,如果成功,则调用另一个子例程以获取该元素的html数据。

每个子例程有效地为每个元素调用一个单独的查询。 我认为,权限步骤涉及查询两个单独的表。

目前,性能并不是真正的问题,也没有要求我对此进行研究。 虽然页面请求在我看来有点慢。

值得尝试重写SQL东西吗? 我认为提高可维护性最终是值得的,并且如果将来可伸缩性成为一个问题,它将使我更轻松。

还是真的不像我想的那么糟糕? 也许我只是反应过度。 专家的意见将不胜感激。

如果要使将来的工作变得更轻松,我将在修复查询之前开始重构意大利面条代码。 一旦有了一个不错的设计,它也应该更直接地说明如何集成(甚至消除)一些手动联接。

重构是开发过程的重要组成部分。 忽略这一事实意味着将来会有更多问题。 问题的部分在于,没有多少管理者了解连续重构的重要性。
我建议您阅读Joshua Kerievsky的“重构为模式”,其中有许多很好的示例,说明了如何通过实施新的设计方法来安全地更改现有代码。

关于SQL查询的问题,它可能不是您需要更改的第一件事。

我认为在您有时间的时候值得重写。 在出现问题之前,您不想拖延它。 我说,让数据库尽其所能。 在这种情况下,表联接肯定会比循环中的多个查询更好。

您的问题过于笼统,无法给出一个很好的答案,并且您也没有针对您的特定情况提供足够的信息来做出有根据的猜测。

需要考虑的事项:

系统会随着时间增长吗? 如何? 如果会有更多的用户在线,则对系统的确定程度更高-则可能会引起警报。 设计不良的系统无法很好地扩展。

不好的代码是一回事,但是不好的数据库和一般的系统设计则更糟。 我认为关键可能是您对“未来几年”的评论。 如果您打算长期使用该系统-那么认真看一下基础知识是个好主意。 如果您的系统可能要用其他东西代替(内部CMS倾向于替换),那么您可以在购物时购买合适的东西。

但是就您的问题而言,请重写一些问题,确保您的数据库已规范化并重构了代码。 告诉老板,如果您要坚持使用系统,这是正确的选择。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM