MySQL优化(二)- 优化SQL语句

简述

数据库应用程序的核心逻辑是通过SQL语句执行的,无论是直接通过解释器发出还是通过API在后台提交。

1.优化SELECT语句

查询以SELECT 语句的形式执行数据库中的所有查找操作。调整这些语句是首要任务,无论是为动态网页实现亚秒响应时间,还是为了产生巨大的隔夜报告而缩短工作时间。

此外SELECT语句,进行查询调谐技术也适用于结构,如 CREATE TABLE…AS SELECT, INSERT INTO…SELECT和WHERE在条款 DELETE的语句。这些语句具有额外的性能考虑因素,因为它们将写操作与面向读取的查询操作相结合。

NDB Cluster支持连接下推优化,从而将合格连接完整地发送到NDB Cluster数据节点,在NDB Cluster数据节点中可以将它们分布在它们之间并且并行执行。有关此优化的更多信息,请参阅 NDB下推连接的条件,

优化查询的主要考虑因素是:

要SELECT … WHERE加快查询速度,首先要检查的是是否可以添加 索引。在WHERE子句中使用的列上设置索引,以加快评估,过滤和结果的最终检索。为避免浪费磁盘空间,请构建一小组索引,以加速应用程序中使用的许多相关查询。

索引对于引用不同表的查询尤其重要,使用 联接和 外键等功能。您可以使用该EXPLAIN语句来确定用于a的索引 SELECT。

隔离并调整查询的任何部分,例如函数调用,这会占用过多时间。根据查询的结构,可以为结果集中的每一行调用一次函数,甚至可以为表中的每一行调用一次函数,从而大大减轻任何低效率。

最大限度地减少 查询中的全表扫描数 ,尤其是对于大表。

通过ANALYZE TABLE定期使用语句使表统计信息保持最新 ,因此优化程序具有构建高效执行计划所需的信息。

了解特定于每个表的存储引擎的调优技术,索引技术和配置参数。双方InnoDB并 MyISAM有两套准则的实现和维持查询高性能。有关详细信息,请参见第8.5.6节“优化InnoDB查询”和 第8.6.1节“优化MyISAM查询”。

您可以InnoDB使用第8.5.3节“优化InnoDB只读事务”中的技术优化表的 单查询事务 。

避免以难以理解的方式转换查询,尤其是在优化程序自动执行某些相同转换的情况下。

如果其中一个基本准则无法轻松解决性能问题,请通过阅读EXPLAIN计划并调整索引,WHERE子句,连接子句等来调查特定查询的内部详细信息 。(当您达到一定的专业水平时,阅读 EXPLAIN计划可能是您每次查询的第一步。)

调整MySQL用于缓存的内存区域的大小和属性。通过有效使用 InnoDB 缓冲池, MyISAM密钥缓存和MySQL查询缓存,重复查询运行得更快,因为在第二次及以后的时间内从内存中检索结果。

即使对于使用高速缓存存储区域快速运行的查询,您仍可以进一步优化,以便它们需要更少的高速缓存,从而使您的应用程序更具可伸缩性。可伸缩性意味着您的应用程序可以处理更多的并发用户,更大的请求等,而不会出现性能大幅下降的情况。

处理锁定问题,其中查询的速度可能会受到同时访问表的其他会话的影响。

1.WHERE子句优化

WHERE子句优化

2.范围优化

3.索引合并优化

4.发动机状态下推优化

5.指数条件下推优化

6.嵌套循环连接算法

7.嵌套连接优化

8.外连接优化

9.外连接简化

10.多范围读取优化

11.块嵌套循环和批量密钥访问连接

12.条件过滤

13.IS NULL优化

14.ORDER BY优化

15.GROUP BY优化

16.DISTINCT优化

17.LIMIT查询优化

18.函数调用优化

19.行构造函数表达式优化

20.避免全表扫描

2.优化子查询,派生表和视图引用

3.优化INFORMATION_SCHEMA查询

4.优化数据变更声明

5.优化数据库权限

6.其他优化技巧

发布了48 篇原创文章 · 获赞 14 · 访问量 4153

猜你喜欢

转载自blog.csdn.net/weixin_42366378/article/details/98543826