【问题标题】:Php Optimization: Fetching from databasePHP优化:从数据库中获取
【发布时间】:2013-07-01 13:45:15
【问题描述】:

我有一些 PHP 代码,一旦按下下一个箭头,它基本上只会获取数据库中的下一个图像。然而,在我的网站上,我有时可以让 600 多个在线用户全部点击下一步。有什么办法可以优化这个 php 代码以更快地执行?

谢谢!

$nxtImage = mysql_query ("SELECT * FROM images WHERE active=1 and id>$id and section=$section ORDER BY id ASC LIMIT 1") or die (mysql_error());
$nxtrow = mysql_fetch_array($nxtImage);
$nxtnum = mysql_num_rows($nxtImage);
$nid = $nxtrow['id'];
$npicTitle = $nxtrow['img_title'];
$nimgLink = preg_replace("![^a-z0-9]+!i", "-", $npicTitle);
$nimgLink = strtolower($nimgLink); 

【问题讨论】:

  • 如果id 是某种索引,如主键,它已经排序,所以你不必告诉它排序任何东西。删除此 ORDER BY id ASC 可能已经提高了此查询的性能。
  • 使用 Memcached 之类的东西来缓存查询结果怎么样?
  • 尽管 mysql* 函数在速度上具有边际优势,但您应该切换到 mysqli*,尤其是在 $id 变量声明如下:$id = $_GET['id']...跨度>
  • 你的表结构是什么? IE。 DESC images;

标签: php html database


【解决方案1】:

我要做的第一件事是将查询更改为:SELECT `id`, `img_title` FROM images ...,以确保您只获取您需要的内容。接下来我要做的是在id, img_title, section, active 上建立一个覆盖索引,这样它就不必读取数据页。

除此之外,获得更多硬件,:D

【讨论】:

  • SELECT * ... 通常更快
  • @dualed,谁更快?开发商?因为我会同意,但对于服务器来说它并不快。首先,SELECT * 必须运行算法来恢复所有列,其次,返回比所需数据集更强大的数据集永远不会更有效率。最后,当使用SELECT * 时,您可以构建覆盖索引,这就是您真正开始看到性能提升的地方。
  • 更快,如“在 SQL 引擎上执行需要更长的时间”。不确定 4 个字段上的覆盖索引是否是一件好事,但无论如何它可能是整个表,从我的角度来看,在表的所有列上放置索引是非常值得商榷的。无论如何,* 应该使用覆盖索引,如果该索引包含表的所有列
【解决方案2】:

您可以在一开始就在服务器端获取所有图像,然后以 Javascript(例如使用 JSON)将其传递给客户端。

然后,每当有人单击箭头时,您只需在 Javascript 中加载正确的图像(例如,使用下一个更大的数组索引)。

这样您将消除大量(可能是数量级)的数据库查询,从而提高您的服务器性能。

【讨论】:

    【解决方案3】:

    一旦您知道您的用户会经常点击“下一个”,您就可以实现hashtag navigation,其中 JavaScript 已经简要介绍了接下来 10、20 张图像的参数,并使用动态内容执行导航,而无需费心PHP 和 MySQL 如此频繁。

    此外,MySQL 提供了tunning parameters,您可以在其中增加key_buffer_sizetable_cache 的值,以告诉您的服务器将更多信息及时保存在内存中,以便更快地搜索和立即响应。

    我通常会调整它以使用服务器上大部分未使用的内存,因为未使用的内存是一种浪费的资源。

    【讨论】:

      【解决方案4】:

      您可以在表中添加一个名为 nextID 的列。我知道,它破坏了数据库规范化,但在极端情况下,您可能需要这些技巧以维护字段的代价来提高性能。请注意,可以使用数据库触发器来维护这个新字段。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2020-11-20
        • 2019-04-16
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-04-05
        • 2011-01-23
        • 2012-04-19
        相关资源
        最近更新 更多