我正在阅读Jeff Atwood关于Behold WordPress,CPU驱逐舰的博客,并看到那里有很多人认为每页加载20个SQL查询很多.现在,对于具有自动建议,自动刷新数据,自定义页面和厨房水槽的高动态页面,每页的平均查询量是多少?
举一个简单的例子,Amazon.com几乎可以根据他们认为我会购买的东西来定制我的主页.对我来说,这看起来并不只是对首页使用5个或更少的查询.
我仍然是数据库的新手,所以请告诉我,我是否遗漏了一些明显的东西.
您通常可以将所有数据放在两个或三个大查询中,而不是二十个小查询中.最小化查询量与编写最佳查询以最大化性能一样重要,如果不是最重要的话.
当然,您应该始终分析查询计划,并针对最佳查询,无论是小型还是大型.
问题是,设计糟糕的网页会执行许多查询,每个小任务一个查询,可以轻松地将其分组到一个查询中.
例如,设计糟糕的stackoverflow可以执行查询以获取它将在主页面上显示的所有问题ID,然后对每个问题执行一个查询以获取摘要和投票.然后你有20个无用的查询.设计良好的将执行单个查询,获取有关它将显示的所有问题的所有信息.
当然,这一切的影响都会通过良好的缓存来降低,这是所有大型网站所做的,这样你实际上可以做很多查询并且仍然可以获得不错的性能.
它更多的是缓存.
如果您获得大量并发页面视图,并且每个页面视图都会执行大量查询,那么每次查看数据库都没有多大意义.单.时间.特别是当很多数据返回时,将通过半动态参考数据,这些参数数据时不时地改变(而不是总是在变化的会话或实时数据).
您也可以使用memcached或类似的东西来缓存这些数据库结果.您不一定需要缓存整个页面(尽管这是大多数Wordpress缓存插件所做的),因为这会杀死交互性,但您可以逐个数据地缓存.
还有优化查询的问题.特别是避免了对父记录进行一次查询的可怕N + 1情况,然后为每个子记录进行额外查询.单独来回往返数据库的延迟将会破坏您的页面呈现性能,更不用说引起数据库本身的悲伤了.
我在派对上总是迟到,这有点迟了5年......
但对于这个问题的最重要的答案是,查询的数量至少比查询时间要长.
如果具有多个连接和子查询的大型查询需要20秒才能执行,那么(我认为)20个小查询总共需要0.2秒才能更好.
我发现管理较小的查询更容易,主要是因为我缓存每个查询,我可以一次又一次地重复使用来自该查询的数据.....
答案实际上取决于以下几个关键因素: - 您网站的流量 - 支持的IT预算 - 网站的复杂性和优化所需的资源
如果你的网站每天都有一些点击,那么谁会关心20个查询.另一方面,如果您是亚马逊,那么您将以较大的基础设施成本提供所需的内容.
几乎世界上其他所有人都介于这两个极端之间,并且必须根据自己的资源进行平衡.
我要说的另一件事就是缓存是你的朋友.