首页 > 数据库 >mysql的执行计划

mysql的执行计划

时间:2023-05-12 17:32:11浏览次数:42  
标签:mysql 查询 索引 计划 sql 执行 ID

在咱们工作中写sql写多了必然会出现查询比较慢的 sql,一般的情况就是会去加索引,但是怎么加索引就很重要了,这个时候一般情况下就是会通过查询条件进行判断加什么索引,要么就是去查看 mysql 的执行计划然后通过执行计划的结果决定加什么索引,怎么加索引。

执行计划

mysql官方的解释文档:MySQL :: MySQL 8.0 参考手册 :: 8.8.2 EXPLAIN 输出格式 一般在查看mysql 的执行计划的是会出现以下列:

mysql的执行计划_sql

这个是 mysql 官方文档通过浏览器翻译的结果,这么多列其实我们并不需要每一列都详细的查看,我们需要注意以下几项:

id

sql语句非常长,比如有好几百行了,同时又使用到了很多表通过各种连接进行查询,id 就表示哪个sql语句先执行哪个后执行,主要有以下几点:
1、如果ID是相同的,那么执行顺序从上而下
2、如果ID不同,如果是子查询,id的序号会递增,值越大优先级越高并且会优先执行
3、ID有相同的也有不相同的,相同的认为是一组,从上自下执行,在所有的组中,ID值越大优先级越高,越先被执行。

table

告诉咱们当前执行查询的表是查询的哪个具体表的数据。

type

这个可以说是执行计划里面最重要的一列,它表示当前sql执行的具体情况,有没有走索引等,它的优先级为:all<index<range<index_merge<ref_or_null <ref <system/const,越到后面表示性能越高
一般情况下需要保证 sql 至少需要需要达到 range 级别,最理想的情况最低达到 ref 级别。

key

表示在执行过程中具体使用到了哪一个索引,在一个表中可能会存在多个索引,mysql 提供了一个优化器去帮我们选择走哪个索引,但规矩是死的人是活的,有时候它走那个索引并不一定会快,所以需要我们指定走哪个索引,可以使用 for index 去指定走什么索引,然后进行对比。

rows

表示在sql执行的时候对数据行的预估量,它是一个预估值,并不是一个准确值,但差别并不会特别大。

extra

它表示额外的信息,比如经常能看到的 using whereusing index,它表示在sql执行过程中有没有用到一些技巧点,比如索引覆盖,索引下推等。

标签:mysql,查询,索引,计划,sql,执行,ID
From: https://blog.51cto.com/u_15460404/6271495

相关文章

  • MySQL 删除数据表
    MySQL删除数据表MySQL中删除数据表是非常容易操作的,但是你在进行删除表操作时要非常小心,因为执行删除命令后所有数据都会消失。语法以下为删除MySQL数据表的通用语法:DROPTABLEtable_name;在命令提示窗口中删除数据表在mysql>命令提示窗口中删除数据表SQL语句为DROPT......
  • Linux 服务器下Mysql自动备份 30天滚动存储 每天凌晨2点准时备份
    一、创建备份目录执行命令:在指定路径下创建备份目录cd/mnt/filemkdirdata_backup二、编写shell脚本放在/mnt/file/data_backup里创建.shshell脚本:touchbkmysql.sh打开脚本文件:vim bkmysql.sh脚本文件内容如下所示:login_user表示数据库用户名......
  • CentOS5.7 下mysql5.7自动备份数据脚本
    mysql5.7自动备份数据库脚本1.root用户下用cd命令进入到想要的位置创建一个脚文文件://创建脚本命令vimbackup.shvim脚本名.sh#!/bin/bashsource/etc/profile#加载系统环境变量source~/.bash_profile#加载用户环境变量set-onounset......
  • MYSQL 查找单个字段或者多个字段重复数据,清除重复数据
    重复数据的情况分为两种:  单个字段数据重复  多个字段数据重复所以该篇的内容就是包括单个字段的重复数据查找 与去重多个字段的重复数据查找 与去重 第一步先查出来所有重复的数据selectt.id,t.subject_id,t.image_id,t.mark_person_idfromdm......
  • pytest的执行顺序
    一、相关库推荐rich打印更好loguru日志库二、一个py.文件setupmodule(最优先运行的,不能放在class内部,模块级别)class:setup_class(类级别)setup_method(方法级别)teardown_methodtest_atest_bteardown_classte......
  • docker 安装mysql
    一、拉取镜像#拉取镜像dockerpullmysql#或者dockerpullmysql:latest#执行版本dockerpullmysql:5.7#以上两个命令是一致的,默认拉取的就是latest版本的#我们还可以用下面的命令来查看可用版本:dockersearchmysql 二、查看镜像使用以下命令来查看是......
  • win10系统,VC运行库缺失bug(由于找不到MSVCP110.dll,无法继续执行代码)
    bug:由于找不到MSVCP110.dll,无法继续执行代码。重新安装程序可能会解决此问题。bug:由于找不到MSVCP140_CODECVT_IDS.dll,无法继续执行代码。重新安装程序可能会解决此问题。原因分析我昨天清理了c盘,把vc运行库全给删了。今天打开AE,就出现了上面两个提示。那么显......
  • mysql8.0.33的安装教程
    1、1 MySQL有四种不同的版本:community版、standard版、enterprise版和cluster版。Community版Community版是MySQL最常用的免费版本,它是基于GPL(GNU通用公共许可证)许可协议发布的。它是开源的,可以利用社区的贡献来维护和改进。有非常多的支持和帮助,可以从官方网站下载。Standar......
  • Mysql-MHA集群
    基本概念由来MHA(MasterHighAvailability)目前在MySQL高可用方面是一个相对成熟的解决方案。它由日本DeNA公司youshimaton(现就职于Facebook公司)开发。原理组成由两部分组成:MHAManager(管理节点)和MHANode(数据节点)MHAManager可单独部署在一台独立的机器上管理多个mast......
  • Mysql-Mycat集群
    读写分离基本概念MySQL虽然是世界上使用最广泛的免费数据库,但是并不能满足实际的一个需求,在高并发高可用等方面。我们主要是通过主从复制来同步数据,再通过读写分离来提升数据库的并发能力。工作原理主数据库上执行写操作,并将写操作的结果同步到所有从数据库。从数据库上只处......