我应该使用一个大的SQL Select语句还是几个小的SQL语句?
我正在使用从MySQL发送的数据构建一个PHP页面。
有没有更好
- 1个具有4个表联接的" SELECT"查询,或者
- 4个小的" SELECT"查询,没有表联接;我确实从ID中选择
哪个更快,每种方法的优点/缺点是什么?每个表只需要一行。
解决方案
回答
通常,最好有一个SELECT语句。拥有数据库的主要原因之一是它们能够快速处理信息,尤其是在采用查询格式的情况下。
如果这种方法有任何缺点,那就是我们无法使用一个大型SELECT语句进行某些类型的分析。 RDBMS的纯粹主义者将坚持认为这是一个数据库设计问题,在这种情况下,我们会回到我最初的建议。
回答
我会说1查询与联接。这样,我们只需要打一次服务器即可。而且,如果表与索引连接在一起,它应该很快。
回答
如果我们真的很担心,因为它取决于很多事情,并且可能会有所不同,则应该运行性能分析工具,但通常来说,最好是编译较少的查询和较少的数据库往返次数。
确保我们过滤所有内容以及使用where和join on子句的能力。
但老实说,这通常并不重要,因为与数据库可以做的事情相比,我们可能不会受到那么大的打击,因此,除非优化是规范,否则我们不应该过早地做它,而要做最简单的事情。
回答
当使用JOIN而不是多个查询时,我们将允许数据库应用其优化。我们还可能会检索不需要的行(如果要用多个选择替换INNER联接),这会增加应用程序服务器和数据库服务器之间的网络流量。即使它们在同一盒子上,这也很重要。
回答
从数据库中获取数据后,这可能取决于我们对数据的处理方式。如果我们分别使用四个结果中的每一个,那么拥有四个单独的SELECT语句将更加逻辑和清晰。另一方面,如果我们一起使用所有数据,例如在表中创建统一的行或者其他内容,那么我将使用单个SELECT和JOIN。
我已经完成了一些PHP / MySQL工作,并且我发现即使对于具有大量JOIN的巨大表的查询,如果我们有智能索引,该数据库也非常擅长优化。因此,如果我们对性能很认真,请开始阅读查询优化和索引。
回答
在Oracle下,我们希望利用查询缓存的优势,如果我们在顺序处理中执行大量小查询,则如果最后一个查询将第一个查询从缓存中移出,它将很烂...以便我们及时循环并在下一次遍历时再次运行该第一个查询(显然具有不同的参数值)。
我们正在使用Java存储过程构建XML输出文件,并且肯定地发现每个查询的往返时间都在使我们吃力。我们发现,以尽可能少的查询获取所有数据,然后根据需要将这些值插入XML DOM的速度要快得多。
唯一的缺点是Java代码不太优雅,因为现在数据获取已远离其用法。但是我们必须在尽可能接近零的时间内生成一个大型的复杂XML文件,因此我们必须进行速度优化。
回答
但是,在处理合并表时要小心。我的经验是,尽管在大多数情况下单个联接可能会很好,但是当涉及合并表时,我们可能会遇到奇怪的情况。