MySql性能调优03-[SQL优化]

SQL优化

  • MySQL优化
    • SQL优化-不要写select *
    • SQL优化-小表驱动大表,而不是大表驱动小表
    • SQL优化-连接查询代替子查询
    • SQL优化-提升group by的效率
    • SQL优化-使用limit
    • SQL优化-union all代替union
    • SQL优化-join的表不宜过多

MySQL优化

  • trace工具
set session optimizer_trace='enabled=on',end_markers_in_json =on; -- 开启trace
select * From employees where  name ='ddd';
select * from information_schema.OPTIMIZER_TRACE;

在这里插入图片描述

  • trace
{"steps": [{"join_preparation": {   -- 第一阶段:SQL准备阶段,格式化sql"select#": 1,"steps": [{"expanded_query": "/* select#1 */ select `employees`.`id` AS `id`,`employees`.`name` AS `name`,`employees`.`age` AS `age`,`employees`.`position` AS `position`,`employees`.`hire_time` AS `hire_time`,`employees`.`remark` AS `remark`,`employees`.`salary` AS `salary` from `employees` where (`employees`.`name` = 'ddd')"}] /* steps */} /* join_preparation */},{"join_optimization": { -- 第二阶段,SQL优化阶段"select#": 1,"steps": [{"condition_processing": {  -- 条件处理"condition": "WHERE","original_condition": "(`employees`.`name` = 'ddd')","steps": [{"transformation": "equality_propagation","resulting_condition": "multiple equal('ddd', `employees`.`name`)"},{"transformation": "constant_propagation","resulting_condition": "multiple equal('ddd', `employees`.`name`)"},{"transformation": "trivial_condition_removal","resulting_condition": "multiple equal('ddd', `employees`.`name`)"}] /* steps */} /* condition_processing */},{"substitute_generated_columns": {} /* substitute_generated_columns */},{"table_dependencies": [{"table": "`employees`","row_may_be_null": false,"map_bit": 0,"depends_on_map_bits": [] /* depends_on_map_bits */}] /* table_dependencies */},{"ref_optimizer_key_uses": [{"table": "`employees`","field": "name","equals": "'ddd'","null_rejecting": true}] /* ref_optimizer_key_uses */},{"rows_estimation": [ -- 预估表的访问成本{"table": "`employees`","range_analysis": {"table_scan": {       --全表扫描情况"rows": 10,         -- 扫描行数,"cost": 3.35        -- 查询成本} /* table_scan */,"potential_range_indexes": [    -- 查询可能使用的索引{"index": "PRIMARY",           --主键索引"usable": false,"cause": "not_applicable"},{"index": "idx_name_age_position",  -- 辅助索引"usable": true,"key_parts": ["name","age","position","id"] /* key_parts */}] /* potential_range_indexes */,"setup_range_conditions": [] /* setup_range_conditions */,"group_index_range": {"chosen": false,"cause": "not_group_by_or_distinct"} /* group_index_range */,"skip_scan_range": {"potential_skip_scan_indexes": [{"index": "idx_name_age_position","usable": false,"cause": "query_references_nonkey_column"}] /* potential_skip_scan_indexes */} /* skip_scan_range */,"analyzing_range_alternatives": {"range_scan_alternatives": [{"index": "idx_name_age_position","ranges": ["name = 'ddd'"      -- 索引使用范围] /* ranges */,"index_dives_for_eq_ranges": true,"rowid_ordered": false,"using_mrr": false,"index_only": false,"in_memory": 1,"rows": 1,          -- 索引扫描行数"cost": 0.61,       -- 索引使用成本"chosen": true      -- 是否使用该索引}] /* range_scan_alternatives */,"analyzing_roworder_intersect": {"usable": false,"cause": "too_few_roworder_scans"} /* analyzing_roworder_intersect */} /* analyzing_range_alternatives */,"chosen_range_access_summary": {"range_access_plan": {"type": "range_scan","index": "idx_name_age_position","rows": 1,"ranges": ["name = 'ddd'"] /* ranges */} /* range_access_plan */,"rows_for_plan": 1,"cost_for_plan": 0.61,"chosen": true} /* chosen_range_access_summary */} /* range_analysis */}] /* rows_estimation */},{"considered_execution_plans": [{"plan_prefix": [] /* plan_prefix */,"table": "`employees`","best_access_path": {"considered_access_paths": [{"access_type": "ref",   -- 访问类型:ref,使用索引,如果是scan,则为全表扫描"index": "idx_name_age_position","rows": 1,"cost": 0.35,"chosen": true             --确定选择},{"access_type": "range","range_details": {"used_index": "idx_name_age_position"} /* range_details */,"chosen": false,"cause": "heuristic_index_cheaper"}] /* considered_access_paths */} /* best_access_path */,"condition_filtering_pct": 100,"rows_for_plan": 1,"cost_for_plan": 0.35,"chosen": true}] /* considered_execution_plans */},{"attaching_conditions_to_tables": {"original_condition": "(`employees`.`name` = 'ddd')","attached_conditions_computation": [] /* attached_conditions_computation */,"attached_conditions_summary": [{"table": "`employees`","attached": "(`employees`.`name` = 'ddd')"}] /* attached_conditions_summary */} /* attaching_conditions_to_tables */},{"finalizing_table_conditions": [{"table": "`employees`","original_table_condition": "(`employees`.`name` = 'ddd')","final_table_condition   ": null}] /* finalizing_table_conditions */},{"refine_plan": [{"table": "`employees`"}] /* refine_plan */}] /* steps */} /* join_optimization */},{"join_execution": {  --第三阶段:SQL执行阶段"select#": 1,"steps": [] /* steps */} /* join_execution */}] /* steps */
}

SQL优化-不要写select *

在这里插入图片描述

SQL优化-小表驱动大表,而不是大表驱动小表

在这里插入图片描述

SQL优化-连接查询代替子查询

在这里插入图片描述
在这里插入图片描述

SQL优化-提升group by的效率

给group by后面的字段添加索引
在这里插入图片描述

SQL优化-使用limit

在这里插入图片描述

SQL优化-union all代替union

在这里插入图片描述

SQL优化-join的表不宜过多

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/web/44600.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Kithara与OpenCV (一)

Kithara使用 OpenCV 库 目录 Kithara使用 OpenCV 库简介需求和支持的环境构建 OpenCV 库使用 CMake 进行配置以与 Kithara 一起工作 使用 OpenCV 库设置项目运行 OpenCV 代码图像采集和 OpenCV自动并行化限制和局限性1.系统建议2.实时限制3.不支持的功能和缺失的功能4.显示 Ope…

数字化打造行业生态产业链,企业新增益全知道

在当今数字化时代,利用数字化打造行业生态产业链成为企业发展的重要战略选择。那么,这一举措究竟能为企业带来哪些新增益呢?让我们一探究竟。 一、运营效率大幅提高 数字化技术就像一条神奇的纽带,将产业链上的各个环节紧紧相…

Python函数 之 匿名函数

1.概念 匿名函数: 使用 lambda 关键字 定义的表达式,称为匿名函数. 2.语法 lambda 参数, 参数: 一行代码 # 只能实现简单的功能,只能写一行代码 # 匿名函数 一般不直接调用,作为函数的参数使用的 3.代码 4.练习 # 1, 定义匿名函数, 参数…

32路串口服务器 应用领域

32路串口服务器在多个领域有着广泛的应用,以下是详细的应用实例: 一、工业自动化 在工业自动化领域,32路串口服务器发挥着举足轻重的作用。传统的工业设备往往采用串口通信方式,而串口服务器能够将这些设备接入网络,…

集训 Day 3 总结 虚树 + dfs tree + 基环树

虚树 虚树,顾名思义是 只关注原树上的某些 关键点,在保留原树祖孙关系的前提下建出的一棵边数、点数大大减少的树 适用于优化某些在整棵树上进行 d p dp dp、 d f s dfs dfs 的问题 通常是题目中出现多次询问,每次给出树上的一些关键点&a…

人为因素:为什么网络安全不仅仅关乎技术

关注公众号网络研究观获取更多最新内容。 我们生活在一个生活与技术日益紧密交织的世界。但在构建防火墙和安装防病毒软件时,我们常常会忘记一个关键因素:人的行为。 网络犯罪分子正是利用了人为因素,利用巧妙的心理战术绕过最强大的安全措…

【MySQL基础篇】事务

事务简介 事务是一组操作的集合,它是一个不可分割的工作单位,事务会把所有的操作作为一个整体一起向系统提交或或撤销操作请求,即这些操作要么同时成功,要么同时失败。 典型事例:银行转账操作 假设张三向李四进行转账…

防火墙NAT、智能选路综合实验

一、实验拓扑 二、实验要求 1,办公区设备可以通过电信链路和移动链路上网(多对多的NAT,并且需要保留一个公网IP不能用来转换) 2,分公司设备可以通过总公司的移动链路和电信链路访问到Dmz区的http服务器 3,多出口环境基于带宽比例…

node js安装、配置(Windows版)

目录 node js 安装 node js 全局配置 1、全局安装路径 2、全局缓存路径 3、修改环境变量 pnpm安装、卸载 全局安装pnpm 验证pnpm版本 卸载pnpm 1、移除全局安装的包 2、移除pnpm cli 脚本直接安装 npm安装的使用命令直接卸载 node js 安装 cmd 查看是否存在&…

容器docker 架构命令案例

文章目录 前言一、docker1.1 为什么有docker1.2 docker架构1.3 docker 安装1.4 docker中央仓库1.5 docker 基本指令1.6 docker数据卷,挂载例:nginx 数据卷挂载例:mysql 本地持久化 1.7 镜像制作镜像结构dockerfile基础指令容器生成镜像 1.8 d…

宿主机访问docker容器中的mysql被拒绝

问题: 解决方案: 1.进入docker中的mysql容器 docker exec -it 容器名称/id /bin/bash 2.登录用户 mysql -u root -p 3.进去mysql自带的管理数据库mysql use mysql; 4.查询用户的访问权限 SELECT user, host FROM user WHERE userroot;5.发现该用…

绘画平台小程序的设计

管理员账户功能包括:系统首页,个人中心,学生管理,讲师管理,课程类型管理,课程信息管理,课程购买管理,作业类型管理 开发系统:Windows 架构模式:SSM JDK版本&…

AURORA仿真

AURORA 仿真验证 定义:AURORA是一种高速串行通信协议,通常用于在数字信号处理系统和其他电子设备之间传输数据。它提供了一种高效的方式来传输大量数据,通常用于需要高带宽和低延迟的应用中。AURORA协议通常由Xilinx公司的FPGA器件支持&#…

golang 项目打包部署环境变量设置

最近将 golang 项目打包部署在不同环境,总结一下自己的心得体会,供大家参考。 1、首先要明确自己目标服务器的系统类型(例如 windows 或者Linux) ,如果是Linux 还需要注意目标服务器的CPU架构(amd或者arm) 目标服务器的CPU架构可执行命令&…

python 爬取当当网图书榜

首先查看当当网好评书单页面&#xff0c;找到翻页的URL参数 直接用requests请求页面 resp requests.get(url) 找到想要的信息&#xff0c;使用正则表达式把这些信息提取出来 patternre.compile(list_num.*?(\d).<.*?<img src"(.*?)".*?title"(.*?…

Eel入门还有一些案例

Eel入门还有一些案例 Eel 是一个 Python 库&#xff0c;它允许 Python 程序通过简单的 API 与网页进行交互。它使用 WebSocket 协议来实现 Python 后端和 JavaScript 前端之间的实时通信。下面是关于 Eel 的用法、通信原理和使用场景的一篇博客文章。 Eel的基本原理 Eel的基本原…

FGF14:脑部疾病新潜力靶标

成纤维细胞生长因子14&#xff08;FGF14&#xff09;是FGF11亚家族成员&#xff0c;在神经元的所有基本特性&#xff08;内在放电、兴奋性和抑制性神经元的突触传递和可塑性&#xff09;中发挥作用。 &#xff08;数据来源AlphaFold&#xff09; FGF14由247个氨基酸组成&#x…

实战篇(九):解锁3D魔方的秘密:用Processing编程实现交互式魔方

解锁3D魔方的秘密:用Processing编程实现交互式魔方 使用 Processing 创建一个 3D 魔方效果展示1. 安装 Processing2. 项目结构3. 代码实现4. 代码解释4.1. 初始化魔方4.2. 绘制魔方4.3. 处理鼠标事件4.4. 检查点击的面4.5. 旋转面和最终确定旋转5. 运行和测试6. 细节解释6.1. …

【资源调度】2-如何解决资源调度问题?

导读&#xff1a;本期是全网最全【资源调度】系列推文的第2期(共50期左右)。上期我们在《何为调度&#xff1f;》中&#xff0c;对调度的定义与作用、计划与调度的关系、调度问题的拆解做了详细介绍。从本期开始&#xff0c;我们选择【客服调度】场景作为【资源调度】问题的具象…

51单片机(STC8H8K64U/STC8051U34K64)_RA8889_8080参考代码(v1.3)

硬件&#xff1a;STC8H8K64U/STC8051U34K64 RA8889开发板 硬件跳线变更为并口8080模式&#xff0c;PS00x&#xff0c;R143&#xff0c;R142不接&#xff0c;R141无关 8080接口电路连接图&#xff1a; 实物连接图&#xff1a; RA8889开发板外接MCU连接器之引脚定义&…