MySQL优化(8):SELECT 之 IS NULL 优化
MySQL 对 col_name IS NULL
执行了优化。如果 WHERE 子句包含声明为 NOT NULL
的列的 col_name IS NULL
条件,则该表达式将被优化掉。
MySQL 对 col_name IS NULL
执行了优化。如果 WHERE 子句包含声明为 NOT NULL
的列的 col_name IS NULL
条件,则该表达式将被优化掉。
从 MySQL 8.0.18 开始,MySQL 对每个连接(join)具有等连接条件的任何查询使用哈希连接(Hash Join)。哈希连接通常比以前版本的 MySQL 中使用的块嵌套循环算法更快。
索引合并访问方法检索具有多个范围扫描的行并将它们的结果合并为一个。
此访问方法仅合并来自单个表的索引扫描,而不是跨多个表的扫描。 合并可以产生其底层扫描的联合、交集或交集。
范围访问方法使用单个索引来检索包含在一个或多个索引值区间内的表行的子集。
它可用于 single-part 或 multiple-part 索引。 以下部分描述了优化器使用范围访问的条件。
本篇讨论可用于处理 WHERE 子句的优化。 这些示例使用 SELECT 语句,但相同的优化适用于 DELETE 和 UPDATE 语句中的 WHERE 子句。
数据库应用程序的核心逻辑是通过 SQL 语句执行的,无论是通过解释器直接发出的,还是通过API在后台提交的。
查询以 SELECT 语句的形式执行数据库中的所有查找操作。调整这些语句是重中之重,无论是实现动态网页的次秒响应时间,还是缩短生成大量夜间报告的时间。
在项目中需要做个报表统计,需要做多表联查,同一个 SQL 语句 Where 字段相同,但条件值不同,索引使用情况仅然不同,还存在索引失效的情况,使用强制索引与是否一起使用分页对查询效率的影响还存在关联影响。
于是做了如下分析。
MySQL优化篇系列介绍 MySQL 性能的优化并提供示例。优化涉及在多个级别上配置、调优和测量性能。
根据个人所在的工作角色(开发人员、DBA 或两者的组合),可以在单个 SQL 语句、整个应用程序、单个数据库服务器或多个联网数据库服务器的级别进行优化。
有时,可以主动并提前计划性能,而有时可能会在出现问题后对配置或代码问题进行故障排除。
优化 CPU 和内存使用还可以提高可扩展性,允许数据库处理更多负载而不会减慢速度。
数据库的性能取决于许多因素,主要是查询,schema,配置项,硬件。
MySQL 对范围查询提供了 range access method(范围访问方法) 来优化查询。
范围访问方法使用单个索引来检索包含在一个或多个索引值区间内的表行的子集。这里的单个索引可以是单列索引或多列索引。