MySQL 优化:优化 SQL 语句:优化 SELECT 语句

来自Wikioe
Eijux讨论 | 贡献2021年4月25日 (日) 11:50的版本 (建立内容为“category:MySQL == 关于 == 查询以“SELECT”语句的形式执行数据库中的所有查找操作。 * 除了“SELECT”语句外,查询的调整技…”的新页面)
(差异) ←上一版本 | 最后版本 (差异) | 下一版本→ (差异)
跳到导航 跳到搜索


关于

查询以“SELECT”语句的形式执行数据库中的所有查找操作。

  • 除了“SELECT”语句外,查询的调整技术还适用于:“CREATE TABLE...AS SELECT”,“INSERT INTO...SELECT”和“DELETE”语句中的“WHERE”子句。这些语句还有其他性能方面的考虑,因为它们将写操作与面向读取的查询操作结合在一起。
  • NDB Cluster 支持 join 下推优化,将符合条件的 join 整体发送到 NDB Cluster 数据节点,在这些节点之间可以分布并并行执行。【???】


优化查询的主要注意事项是:

  1. 要使慢速“SELECT ... WHERE”查询更快,首先要检查的是是否可以添加index。在“WHERE”子句中使用的列上设置索引,以加快评估,过滤和最终检索结果的速度。为了避免浪费磁盘空间,请构造一小组索引,以加快应用程序中使用的许多相关查询的速度。
    对于使用“joins”和“foreign keys”之类的功能引用不同表的查询,索引尤为重要。您可以使用“EXPLAIN”语句来确定 SELECT 使用哪些索引。
  2. 隔离并调整查询中花费时间过多的任何部分,例如函数调用。根据查询的结构方式,可以对结果集中的每一行调用一次函数,甚至可以对表中的每一行调用一次函数,从而极大地提高了效率。
  3. 最小化查询中的全表扫描数量,尤其是对于大表。
  4. 通过定期使用“ANALYZE TABLE”语句来使表统计信息保持最新,因此优化器具有构造有效执行计划所需的信息。
  5. 了解每个表的存储引擎特定的调整技术,索引技术和配置参数。InnoDB 和 MyISAM 都有一套准则,用于启用和维持查询的高性能。
  6. 避免以难以理解的方式转换查询,尤其是在优化程序自动执行某些相同转换的情况下。【?】
  7. 如果使用基本准则之一不能轻松解决性能问题,请通过阅读“EXPLAIN”计划并调整索引,WHERE 子句,join 子句等来调查特定查询的内部详细信息。
    • (当您达到一定的专业水平时,阅读 EXPLAIN 计划可能是每个查询的第一步。)【!】
  8. 调整 MySQL 用于缓存的内存区域的大小和属性。通过有效地使用InnoDB buffer pool(缓冲池),MyISAM 键高速缓存和 MySQL 查询高速缓存,重复查询的运行速度更快,因为第二次及以后都从内存中检索结果。
  9. 即使对于使用缓存区域快速运行的查询,您也可能会进一步优化,以使它们需要更少的缓存,从而使您的应用程序更具可伸缩性。可伸缩性意味着您的应用程序可以处理更多的并发用户,更大的请求等,而不会导致性能大幅下降。
  10. 处理问题,其中其他会话同时访问表可能会影响查询速度。

WHERE 子句优化

范围优化

索引合并优化

引擎调教下推优化【???】

索引条件下推优化【???】

嵌套循环连接算法

嵌套联接优化

Outer Join 优化

Outer Join 简化

多范围读取优化

阻止嵌套循环和批量密钥访问联接

条件过滤

IS NULL 优化

ORDER BY 优化

GROUP BY 优化

DISTINCT 优化

LIMIT 查询优化

函数调用优化

行构造函数表达式优化

避免全表扫描