php—在数组中操作sql查询时,将sql查询作为一个sql脚本(带有内部联接)运行,而不是作为多个脚本运行

7kqas0il  于 2021-06-20  发布在  Mysql
关注(0)|答案(2)|浏览(368)

我很难理解具体的事情,我将分享我的实验:
从我以前的工作中学到的经验来看,首席执行官的指导包括:所有mysql查询必须包含我需要的参数,并一次查询所有参数以获得准确的数据,对吗?因此,如果我有一个电子商务商店,在那里我加载10个项目进行查询,这将是一个完美的工作。我的结论是-这对于我不需要一次加载大量数据的页面来说非常有用。不管我的数据库有多大(考虑:良好做法)
我有一个网站,我必须返回一个(长,大,重,地狱的)csv报告。我编写了使用内部联接所需的所有查询—但这次我的数据库包含数百万行,我的报表循环了50000次(通过我拥有的每个客户),并使用内部联接从每个包含数百万行的4~6个表中收集数据。有些人甚至会做一些计算。所有的系统都是面向对象的,所以每个对象都是单个用户的(这本身就是一个查询)。因此,我的代码对数据库进行了大量的小查询,为每个用户请求数据,在循环时,有大约4~6个大的内部连接查询。这花了几分钟的时间。
我觉得这没什么意义,所以我决定尝试一下。我决定将所有内容分开,不将所有内容用作“对象”,而是一次从表中获取所有数据,不使用任何连接,并通过php进行管理。所以我把所有有相关数据的用户放到1$users数组中。然后从表a得到更多的数据。然后从表b。组织表b。从表c得到数据。对表c进行了计算。ect'。再次循环,同时将我的数据匹配到最后一个数组,并输出到csv。
这只花了不到1分钟的时间!
它没有消耗数据库内存,反而影响了cpu。在重新编写代码以提高效率之后,只花了不到30秒的时间。而且没有任何cpu故障。
如果我所有的代码都是基于oop的,并且这种“直接”脚本编写的方式工作得更快:对于特定的大而重的输出,继续使用它可以吗(在“好的或坏的”实践方面)。
附言:我本想用汇总表,但这不是首席执行官现在想要的。
ps2:表索引正确。

jxct1oxe

jxct1oxe1#

关于你的ceo关于参数化查询的建议,他说的没错,这会更快。添加参数可以让服务器规划查询并缓存计划以备将来使用,从而节省执行时间。它还通过正确处理任何恶意用户文本来帮助防止sql注入攻击。在一个查询中做任何事情都是最好的,因为连接和发出查询的开销会给查询增加大量的时间。
我感到惊讶的是,您通过手动编码获得了如此显著的性能提升。您可能需要分析数据库结构,以确保没有更有效的方法来组织或查询数据。
但是,编写自定义代码来进行数据构造是一种有效的方法,只要您愿意承担维护数据的额外责任。我假设编写和调试代码所花费的时间比编写查询所花费的时间要大得多。当需求发生变化时,可能需要相同的时间来维护它。

fdbelqdn

fdbelqdn2#

(意见)
通常可以对查询进行足够的改进,使其比在数据库和应用程序之间来回铲取数据更快。
更好的指数(尤其是“综合”指数)
重新制定 SELECT 正常化,但不过度正常化
构建和维护“摘要”表—在某些情况下,这会将查询速度提高10倍。

相关问题