• 首页 首页 icon
  • 工具库 工具库 icon
    • IP查询 IP查询 icon
  • 内容库 内容库 icon
    • 快讯库 快讯库 icon
    • 精品库 精品库 icon
    • 问答库 问答库 icon
  • 更多 更多 icon
    • 服务条款 服务条款 icon

在 MySQL 优化分页的 3 种方法

武飞扬头像
allway2
帮助1

很多很多的 Web 应用程序需要分页浏览信息。从客户记录到 iTunes 收藏中的专辑。因此,作为Web开发人员和架构师,我们必须有效地完成所有这些工作。

首先查看如何从 MySQL 数据库中获取信息。我们概述了实现此目的的三种方法。

1. 分页而不丢弃记录

最终,我们试图避免丢弃记录。毕竟,如果服务器不获取它们,我们节省了很多。我们还能如何避免这种额外的工作。

怎么记得姓氏。例如:

  1.  
    select id, name, address, phone
  2.  
    FROM customers
  3.  
    WHERE id > 990
  4.  
    ORDER BY id LIMIT 10;

当然,这样的解决方案只有在按 ID 分页时才有效。如果您按姓名分页,它可能会变得更加混乱,因为可能有多个人具有相同的名称。如果 ID 不适用于您的应用程序,则按用户名返回分页用户可能有效。这些将是独一无二的:

  1.  
    SELECT id, username
  2.  
    FROM customers
  3.  
    WHERE username > 'shull@iheavy.com'
  4.  
    ORDER BY username LIMIT 10;


使用 SQL 时,分页查询可能会很慢,因为它们通常涉及 OFFSET 关键字,该关键字指示服务器您只需要一个子集。但是,它通常会先扫描集合,然后丢弃这些行。使用延迟联接或通过维护位置或位置列可以避免这种情况,并大大加快数据库速度。

2. 尝试使用延迟加入

这是一个有趣的技巧。假设您有客户页面。每个页面显示十个客户。查询将使用 LIMIT 获取十条记录,并使用 OFFSET 跳过所有上一页结果。当你到达第 100 页时,它正在执行限制 10 偏移量 990。因此,服务器必须读取所有这些记录,然后丢弃它们。

 SELECT id, name, address, phone FROM customers ORDER BY name LIMIT 10 OFFSET 990;

MySQL首先扫描索引,然后按主键ID检索表中的行。所以它正在做双重查找等等。事实证明,您可以通过一个称为延迟联接的棘手操作来加快速度。

内部分仅使用主键。解释计划向我们展示了我们喜欢的“使用索引”!

  1.  
    SELECT id
  2.  
    FROM customers
  3.  
    ORDER BY name
  4.  
    LIMIT 10 OFFSET 990;

现在使用 INNER JOIN 将其组合在一起,以获取所需的十行和数据:

  1.  
    SELECT id, name, address, phone
  2.  
    FROM customers
  3.  
    INNER JOIN (
  4.  
    SELECT id
  5.  
    FROM customers
  6.  
    ORDER BY name
  7.  
    LIMIT 10 OFFSET 990)
  8.  
    AS my_results USING(id);

这太酷了!

3. 维护页面或版位列

另一种欺骗优化程序检索不需要的行的方法是为页面、位置或位置维护一列。是的,每当 (a) 插入一行 (b) 删除一行 ( c) 使用 UPDATE 移动一行时,您都需要更新该列。这可能会使页面变得混乱,但笔直的位置或位置可能会更容易。

  1.  
    SELECT id, name, address, phone
  2.  
    FROM customers
  3.  
    WHERE page = 100
  4.  
    ORDER BY name;

或者带有这样的放置列:

  1.  
    SELECT id, name, address, phone
  2.  
    FROM customers
  3.  
    WHERE place BETWEEN 990 AND 999
  4.  
    ORDER BY name;

这篇好文章是转载于:学新通技术网

  • 版权申明: 本站部分内容来自互联网,仅供学习及演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,请提供相关证据及您的身份证明,我们将在收到邮件后48小时内删除。
  • 本站站名: 学新通技术网
  • 本文地址: /boutique/detail/tanhgghckk
系列文章
更多 icon
同类精品
更多 icon
继续加载