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