ToB企服应用市场:ToB评测及商务社交产业平台

标题: MySQL 单表访问方法详解 [打印本页]

作者: 南飓风    时间: 5 天前
标题: MySQL 单表访问方法详解
MySQL 单表访问方法详解:高效查询之道

焦点思想: MySQL 执行单表查询的目标是尽可能高效地从表中获取所需数据。访问方法(Access Method)决定了 MySQL 如何扫描表中的记录,是全表扫描还是利用索引,直接影响查询性能。理解并选择符合的访问方法是查询优化的底子。
一、 查询执行底子


二、 访问方法 (Access Method) 概念

访问方法是指 MySQL 访问表数据的方式,决定了查询优化器选择哪种策略检索数据。

三、 详细访问方法 (从最优到最差)

以下访问方法按效率从高到低排序,类似于查询优化器选择路径的优先级:

  1. SELECT * FROM users WHERE id = 1; -- id 是主键
  2. SELECT * FROM orders WHERE order_no = 'unique_123'; -- order_no 是唯一索引
复制代码
限定 :仅实用于主键列或唯一二级索引列与常数的等值比较,且当唯一二级索引列值为 NULL 时不可用此方法。

  1. SELECT o.*, u.* FROM orders o JOIN users u ON o.user_id = u.id WHERE o.order_id = 100; -- users.id 是主键
复制代码

  1. SELECT * FROM products WHERE category_id = 5; -- category_id 是非唯一索引
复制代码
注意事项 :若二级索引列值为 NULL,只能利用 ref 访问方法而非 const;对于团结索引,只要最左边的一连索引列与常数等值比较就可能采用 ref 方法,否则不能称为 ref。

  1. SELECT * FROM articles WHERE MATCH(title,content) AGAINST ('MySQL 优化');
复制代码

  1. SELECT * FROM users WHERE email = 'test@example.com' OR email IS NULL; -- email 有索引且允许 NULL
复制代码

Intersection 合并 示例:查询 single_table 表中 key1 = ‘a’ AND key3 = ‘b’ 的记录,可利用 idx_key1 和 idx_key3 索引进行 Intersection 合并。别的,主键列可进行范围匹配的情况也可利用此合并方法。
Union 合并 示例:查询 single_table 表中 key1 = ‘a’ OR key3 = ‘b’ 的记录,可利用 idx_key1 和 idx_key3 索引进行 Union 合并。
Sort-Union 合并 示例:查询 single_table 表中 key1 < ‘a’ OR key3 > ‘z’ 的记录,可利用 idx_key1 和 idx_key3 索引进行 Sort-Union 合并。
  1. SELECT * FROM products WHERE price < 100 OR category_id = 5; -- price 和 category_id 都有索引
复制代码
团结索引替代索引合并 :在可能的情况下,利用团结索引可替代索引合并,提高查询效率。例如查询 single_table 表中 key1 = ‘a’ AND key3 = ‘b’ 的记录,可通过创建团结索引 idx_key1_key3(key1, key3) 来直接利用团结索引查询,克制索引合并操纵。

  1. SELECT * FROM products WHERE price BETWEEN 50 AND 100;
  2. SELECT * FROM orders WHERE order_date >= '2023-01-01' AND order_date < '2023-02-01';
复制代码
范围区间确定 :对于复杂搜索条件,需分析哪些条件可利用同一索引,并确定该索引对应的范围区间。如多个条件通过 AND 连接,取各条件范围区间的交集;通过 OR 连接则取并集。若部门条件无法利用索引,则在确定范围区间时将其替换为 TRUE。

界说 :当查询列表中的列全部包罗在某个二级索引中,且查询条件仅涉及该索引列时,可直接遍历二级索引记录获取结果,无需回表操纵。因二级索引记录较小,且克制了回表开销,查询效率较高。
  1. SELECT COUNT(*) FROM orders; -- 若优化器选择索引扫描
  2. SELECT order_id FROM orders; -- order_id 是主键或有索引
复制代码

  1. SELECT * FROM products WHERE description LIKE '%keyword%'; -- description 无索引或前导模糊匹配
复制代码
四、 注意事项


五、 总结与优化建议


六、 电商网站数据存储应用示例


七、 数据备份与恢复模子 (补充)

数据备份与恢复虽非直接访问方法,但保证数据安全和可用性,间接提升访问效率。

总结: 数据备份与恢复保证数据安全和可用性,是数据库稳固运行的底子。定期备份和恢复演练是 DBA 的紧张职责。

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。




欢迎光临 ToB企服应用市场:ToB评测及商务社交产业平台 (https://dis.qidao123.com/) Powered by Discuz! X3.4