2010-01-29 73 views
6

我正在研究CMS使用并在vBulletin 4.0上进行了评论;在一个页面上使用大约200个查询加载。有多少SQL查询是SQL查询太多?

我当时很担心。

进一步研究,把我带到其他网站,看看他们有多少查询中使用,我发现一些论坛软件如Invision电源板和PHPBB使用查询低至6或8

目前,我的网站使用大约25到40个查询。

我应该担心吗?

回答

11

不要担心查询数量。

担心:

  1. 网页载入速度太慢
  2. 的SQL过于复杂的维护。

澄清:

SQL过于复杂,可能来自过多的查询或几个查询是非常复杂(大量的连接和子查询等)。

+2

正确。减少查询次数可能是一个很好的目标,但是如果页面性能良好,不要让查询计数阻止您处理更重要的事情。 – 2010-01-29 22:08:35

+1

我同意,只有在出现问题时才担心此问题(希望您会看到这些问题)。 “不成熟的优化是所有邪恶的根源” - Knuth – 2010-01-29 22:20:21

+0

+1我从来没有听说过[Knuth]之前的报价。我喜欢它! – 2010-01-29 23:24:25

9

如果你瞄准的东西,目标为3读取和1写入每个HTTP命中。

虽然这些是任意数字(不知何故,他们实际上是从Advanced PHP Programming拍摄),他们强调的观点:

  • SQL数量的往返要低,在10肯定的,每个HTTP调用
  • 读写之间存在差异,并且该比率应该有利于读取。写创建争

还记得,并非所有的读取都是平等的:3读取应高度优化读取,而不是4-5外部联接全表扫描...

0

这取决于。你击中数据库越多,负载就越多。只需要寻找一些东西。如果您需要显示来自多个不同表格的值,则可能需要运行多个查询。如果你只有几个用户,并且你知道你不会有很多数据,那么可能没关系。

有些事情要考虑:

  • 你运行一次网页加载相同的查询多次吗?如果您可以重复使用结果,请执行此操作。
  • 您是否正在运行另一个查询的每个查询结果?如果是这样,也许可以让数据库做连接,只做一次拉。

如果您的页面太慢,请查看memcached

0

您可能会尝试重新考虑您的代码,以减少往返SQL Server的次数。一种方法可以使用缓存。例如,您可以在应用程序启动时加载经常需要的数据,然后在需要时从缓存中抓取数据。

另一种方法可能是将数据解除规范化为专门设计用于在少量查询中为您的网站提供数据的表格。

0

还可以考虑是否可以缓存某些查询(例如用于填充查找值的那些查询)。这样,如果在多个页面上调用同一个查询,或者每次从一组记录移动到另一个记录时,数据库都不会再次运行,从而无法运行相同的查询。我记得有一次,我们试图确定为什么当存储的proc运行速度非常快时,为什么网站速度很慢,并且发现使用profiler发现,当它不需要时,它一遍又一遍地被发送。

0

您可以使用vbulletin缓存所有这些查询。如果你看看pbnation.com,他们每天有超过一百万的访问者,每页只有大约3-4个查询量。其他所有内容都缓存在memcached中。