精华内容
下载资源
问答
  • Mysql event不执行问题
    千次阅读
    2019-06-22 17:08:54

    现象
    mysql的event定时任务没有执行

    原因
    重启mysql之后,event_scheduler 变成了 OFF

    解决办法
    更改配置文件 /etc/my.cnf 加入一段event_scheduler=1 在重启mysql systemctl restart mariadb

    更多相关内容
  • Mysql语句执行逻辑

    千次阅读 多人点赞 2022-02-28 19:55:39
    一条SQL查询语句执行流程 select * from table where Id=4 要弄懂这条语句做的事情,我们先看下mysql整个架构涉及的 分为客户端,server端以及存储引擎,存储引擎层负责数据的存储和提取,其架构模式是插件式的,...

    Mysql基础知识

    我们要了解mysql,那就从最常见的流程开始,我们在cilent端输入一条sql,究竟会经历哪些步骤? 可以思考30s …

    一条SQL查询语句执行流程

    select * from table where Id=4

    要弄懂这条语句做的事情,我们先看下mysql整个架构涉及的

    image.png

    分为客户端,server端以及存储引擎,存储引擎层负责数据的存储和提取,其架构模式是插件式的,支持 InnoDB、MyISAM、Memory 等多个存储引擎。现在最常用的存储引擎是 InnoDB,它从 MySQL 5.5.5 版本开始成为了默认存储引擎。

    1. 首先要和server端建立连接,通过命令 mysql -h i p − P ip -P ipPport -u$user -p来进行三次握手,建立连接,建立好的连接可以通过命令 show processlist 来查看

    2. 分析器进行sql的词法和语法分析,如果表字段不存在,是在分析器阶段就提示 “Unknown column ‘k’ in ‘where clause’”,这个设计也是受oracle的影响

    3. 下一步是优化器,主要是进行索引的选择,以及执行方法逻辑的选择,比如你查询 select * from t1 join t2 using(ID) where t1.c=10 and t2.d=20; 可以先根据t1条件查出数据,再根据t2过滤

    4. 确定好执行方式后,执行器会先判断是否有权限进行数据查询,如果有权限,则调用引擎的表接口进行查询

    例如 select * from T where ID=10; 执行器的执行逻辑是这样的:

    a. 调用innodb的引擎接口取这个表的第一行,判断ID的值是不是10,如果不是则跳过,如果是,那将数据存到结果集

    b. 调用引擎接口查询下一行,重复相同的逻辑,直到最后一行数据

    c. 执行器将结果集的数据返回给客户端

    如果ID上面有索引,那么查询a执行的是查询符合条件的数据,在explain 执行语句的时候,rows_examined字段就代表查询的数据次数

    一条SQL更新语句执行流程
    update table set a=‘xxx’ where Id=4

    更新语句前几个步骤和查询语句是一样的,分析器知道这是一条更新语句,优化器决定使用ID这个索引,执行器执行更新,更新流程还涉及重要的两个日志模块,redo log和bin log

    redo log

    在这里插入图片描述

    1. innoDB 引擎就会先把记录写到 redo log里面,并更新内存,这个时候更新就算完成了。同时,InnoDB 引擎会在适当的时候,将这个操作记录更新到磁盘里面,而这个更新往往是在系统比较空闲的时候做

    2. InnoDB 的 redo log 是固定大小的,比如可以配置为一组 4 个文件,每个文件的大小是 1GB

    3. redo log 是物理日志,记录的是“在某个数据页上做了什么修改”

    binlog
    bin log是server端都有的,用于实现 crash-safe 能力。

    binlog 是逻辑日志,记录的是这个语句的原始逻辑,比如“给 ID=2 这一行的 c 字段加 1 ”

    在这里插入图片描述

    索引原理
    索引的常见实现方式: 哈希表、有序数组和搜索树

    哈希表

    哈希表是一种以键 - 值(key-value)存储数据的结构,我们只要输入待查找的键即 key,就可以找到其对应的值即 Value。哈希的思路很简单,把值放在数组里,用一个哈希函数把 key 换算成一个确定的位置,然后把 value 放在数组的这个位置。 可以类比hashMap的实现原理,链条过长还可以用红黑树进行优化

    哈希表适合等值查询,做区间查询很慢

    在这里插入图片描述

    有序数组

    在这里插入图片描述

    有序数组在等值查询和范围查询场景中的性能就都非常优秀,适用于静态存储引擎,因为数组更新效率很慢。静态数据查询效率可以到O(Log(N))

    搜索树

    在这里插入图片描述

    父节点左子树所有结点的值小于父节点的值,右子树所有结点的值大于父节点的值

    插入数据维持平衡树,效率是O(log(N))。查询也是O(log(N))。

    索引实战:

    create table T(id int primary key, k int not null, name varchar(16),index (k))engine=InnoDB;

    表中 R1~R5 的 (ID,k) 值分别为 (100,1)、(200,2)、(300,3)、(500,5) 和 (600,6),两棵树的示例示意图如下。

    在这里插入图片描述

    根据叶子节点的内容,索引类型分为主键索引和非主键索引。

    如果语句是 select * from T where ID=500,即主键查询方式,则只需要搜索 ID 这棵 B+ 树;

    如果语句是 select * from T where k=5,即普通索引查询方式,则需要先搜索 k 索引树,得到 ID 的值为 500,再到 ID 索引树搜索一次。这个过程称为回表。

    索引维护:

    B+ 树为了维护索引有序性,在插入新值的时候需要做必要的维护。以上面这个图为例,如果插入新的行 ID 值为 700,则只需要在 R5 的记录后面插入一个新记录。如果新插入的 ID 值为 400,就相对麻烦了,需要逻辑上挪动后面的数据,空出位置。而更糟的情况是,如果 R5 所在的数据页已经满了,根据 B+ 树的算法,这时候需要申请一个新的数据页,然后挪动部分数据过去。这个过程称为页分裂。在这种情况下,性能自然会受影响。

    除了性能外,页分裂操作还影响数据页的利用率。原本放在一个页的数据,现在分到两个页中,整体空间利用率降低大约 50%。当然有分裂就有合并。当相邻两个页由于删除了数据,利用率很低之后,会将数据页做合并。合并的过程,可以认为是分裂过程的逆过程。

    要求建表语句里一定要有自增主键,大家知道原因了吧? 还有建议直接用主键进行搜索,

    数据页

    常见索引优化
    1、count(*) 和count(1),count(id), count(表字段) 区别以及建议使用方式

    效率:count(字段)<count(主键id)<count(1)≈count(*)

    https://mp.weixin.qq.com/s/p6MCW1O3y53b5pajY_MvAg

    2、索引覆盖,最左匹配原则,回表,索引下推

    索引重建

    索引下推:

    3、联合索引的存储结构是什么样的?

    在这里插入图片描述

    4、 CBO(基于成本的优化),RBO(基于规则的优化) 是什么? 优化器的原理,对于联合索引 (a,b), 当查询条件为 where b=xxx and a=xxxx 是否会命中索引?

    给表加字段的逻辑

    慢sql排查思路

    1. Mysql慢查询如何排查

    #查看所有处理线程
    show processlist;

    查看占用时长的线程

    select * from information_schema.processlist where Command != ‘Sleep’ order by Time desc;

    #查看所有的字段
    show full columns from table_name;
    #查看索引
    show index from table_name;

    explain 具体sql查看是否命中索引等,具体的索引字段

    索引失效的情况
    https://zhuanlan.zhihu.com/p/166247445

    慢sql查看process的state状态

    一直处于sending data状态原因
    https://blog.csdn.net/yunhua_lee/article/details/8573621
    show processlist详解
    https://zhuanlan.zhihu.com/p/30743094

    #查看profile是否打开
    show variables like ‘profiling’;

    SET profiling=on;

    SET profiling=off;
    show profiles;

    show profile for query all;

    事务以及隔离级别,MVCC
    事务基本特性(ACID)

    原子性 aotmic

    一致性 consistent

    隔离性 cnstraint

    持久性 duriation

    原子性由 undo log来保证

    一致性一般由代码来保证

    隔离性 通过MVCC机制进行保证

    隔离级别有四种

    read uncommit 会有脏读问题

    read commit

    repeat read 会有幻读问题

    serialized

    如何解决幻读

    mvcc +间隙锁

    间隙锁是什么?

    左开右闭的一个区间范围

    示例:

    image.png

    begin;

    select * from user where age=20 for update;

    由于20存在记录,所以(10,20],(20,30]区间都被锁定了无法插入、删除

    MVCC叫做多版本并发控制,通过建立不同的视图来实现,每一条sql都会有默认的两个字段

    create_version和deleteVersion,每个不同的事务执行都会有一个create_version增加

    查询数据的时候,只会查询当前事务create_version小于current_version并且delete_version大于current_version或者delete_version为空的数据

    持久性通过 redo log和内存来保证的,这里的数据写入参考上面的数据更新逻辑

    Mysql主从同步

    分库分表

    INNODB
    image.png

    image.png

    展开全文
  • Mysql 执行计划

    千次阅读 2020-05-19 09:03:37
    当客户端发送给mysql 服务器一条查询语句后,经过sql的优化器,会产生一个执行计划。 执行计划 使用 EXPLAIN 关键字可以模拟优化器执行 SQL 查询语句,从而知道 MYSQL 是如何处理你的 sql 语句的。分析你的查询语句...
    当客户端发送给mysql 服务器一条查询语句后,经过sql的优化器,会产生一个执行计划。

    执行计划

    使用 EXPLAIN 关键字可以模拟优化器执行 SQL 查询语句,从而知道 MYSQL 是如何处理你的 sql 语句的。分析你的查询语句或是表结构的性能瓶颈。

    语法: Explain + sql

    执行计划的作用

    • 表的读取顺序
    • 数据读取操作的操作类型
    • 哪些索引可以使用
    • 哪些索引被实际使用
    • 表之间的引用
    • 每张表有多少行被优化器查

    执行计划包含的信息

    在这里插入图片描述

    id:获取 select 子句的操作表顺序,有几种情况
    • id相同的情况下执行顺序是由上到下。
    • id 越大 优先级越高,如果是子查询,ID 序列号会递增,id值越大,优先级越高,越先执行。
    • id 相同又有不相同的,序列号大的会先执行,然后相同的从上到下执行。
    select_type:查询的类别,主要用于区别普通查询,联合查询,子查询等的复杂查询。
    • simple : 简单的select 查询,不包含子查询或者 union
    • primary : 查询中包含任何复杂的子部分,最外层查询则被标记
    • subquery : 在 select 或者 where 列表中包含了子查询
    • derived : 在from 列表中包含子查询被标记为 derived Mysql 会递归执行这些子查询,把结果放到临时表里
    • union : 若在第二个 select 中出现 union之后,则被标记为 union 若union包含在 from 子句的子查询中,外层 select 将被标记为 derived
    • union result : 从 union 表获取结果的 SELECT
    table:显示这一行的数据是关于那个表的
    type:显示的是访问类型,是较为重要的一个指标,结果值从最好到最坏依次是:

    system > const > eq_ref > ref > fulltext > ref_or_null > index_merge > unique_subquery > index_subquery> range > index>all

    需要记住的:system > const > eq_ref > ref > range > index>all 基本需要达到 ref range 级别。

    • system : 表中只有一行记录(等于系统表),这是const 类型的特列,平时不会出现,这个可以忽略不计。
    • const : 表示通过索引一次就找到了,const 用于比较 primary key 或者 unqiue 索引,因为只匹配一条数据,所以很快,如将主键置于 where 条件中,Mysql 就能将该查询转换一个常量。
      在这里插入图片描述
      由于子查询是用id 当条件查询的,所以 type 为 const, 查询为一条数据,外查询所以为 system。
    • eq_ref : 唯一性索引扫描,对于每个索引键,表中只有一条记录与之匹配,常见与主键或唯一索引扫描
    • ref : 非唯一索引扫描,返回匹配某个单独值的所有行
      在这里插入图片描述
    • range: 只检索给定范围的行,使用一个索引来选择行,key列显示使用了哪个索引,一般就是在你的 where 语句中出现了 between ,<,>,in 等查询这种范围扫描比全表扫描要好,因为它只需要开始与索引的某一点,而结束与另一点,不用扫描全部索引。
      在这里插入图片描述
    • index : 当查询的结果全为索引列的时候
      在这里插入图片描述
    • all : Full Table Scan 将遍历全表以找到匹配的行。
    possible_keys :

    可能使用的key(索引)。

    key :

    实际上使用的索引,如果没用索引,则为NULL,查询中若使用了覆盖索引,则该索引和查询的select 字段重叠。

    key len :
    • 表示索引中使用的字节数,可通过该列计算查询中使用的字节长度,在不损失精确的情况下,长度越短越好。
    • key_len 显示的值为索引字段的最大可能长度,并非实际使用长度,即key_len 是根据表定义计算而得,不是通过表内检索出的
    • key_len 表示索引使用的字节数
    • 根据这个值,就可以判断索引使用情况,特别是在组合索引的时候,判断所有的索引字段是否都被查询用到。
    • char 和 varchar 跟字符编码也有密切的联系。(latin1 占用一个字节,gbk 占用两个字节,utf-8 占用三个字节)

    总结 :

    整数/浮点数/时间类型的索引长度 NOT NULL = 字段本身的长度 NULL = 字段本身的字段长度+1(因为需要是否为空的标记,这个标记占一个字节).

    datatime 类型 在5.6中占5个字节,在5.5中占8个字节。

    变长字段需要额外两个字节(varchar 值保存时只保存需要的字符数另外加一个字节来记录长度,如果列声明的长度超过255,则使用两个字节,所以varchar 索引长度计算时候要加2),固定长度字段不需要额外的字节。

    而 NULL 都需要1个字节的额外空间,所以索引字段最好不要为 NULL,因为 NULL 让统计更加复杂并且需要额外的存储空间。

    复合索引有最左前缀的特性,如果复合索引能全部用上,则是复合索引字段的索引长度之和,这也可以用来判定复合索引是否部分使用,还是全部使用。

    ref:

    显示索引被哪一列使用了,如果可能的话,是一个常数。哪些列或常量被用于查找索引列上的值。

    rows

    根据表统计信息及索引选用情况,大致估算出找到所需要读取的行数。

    extra

    包含不合适在其他列中显示但十分重要的额外信息。

    • 描述
      Using filesort说明 mysql 会对数据使用一个外部的索引排序,而不是按照表内的索引顺序进行读取。MYSQL 中无法利用索引来完成的排序操作成为“文件排序”
      Using temporary使用了临时表保存中间结果,MYSQL对查询结果排序的时候使用了临时表。常见于排序 order by 以及 group by
      Using index是否使用覆盖索引
      Using where表明使用了 where 过滤。
      Using join buffer使用了连接缓存。
      Impossible wherewhere 子句总是 false们不能用来获取

    学习年限不足,知识过浅,说的不对请见谅。

    世界上有10种人,一种是懂二进制的,一种是不懂二进制的。

    展开全文
  • mysql输入命令回车后不执行

    千次阅读 2020-07-27 11:30:39
    输入’\c;可解决

    输入’\c;可解决
    在这里插入图片描述

    展开全文
  • 查看MySQL记录执行过的SQL

    千次阅读 2021-01-19 10:21:52
    查看MySQL记录执行过的SQL第一种:查Slow query的SQL语法:log_slow_queries = /var/log/mysql/mysql-slow.loglong_query_time = 2 (超过2秒的SQL语法记录起来,设短一点来记录除错也是一种方法.)第二种:设MySQL ...
  • Mysql执行计划和Mysql优化

    万次阅读 2020-12-05 10:19:56
    执行计划是什么:使用EXPLAIN关键字可以模拟优化器执行SQL查询语句,从而知道MySQL是如何处理你的SQL语句的。 作用:分析你的查询语句或是表结构的性能瓶颈。 语法:Explain + SQL语句 执行计划输出内容介绍:表的...
  • Mysql 执行一条语句的过程

    万次阅读 多人点赞 2022-01-26 18:07:12
    Mysql的逻辑架构 Mysql的逻辑架构如下所示,整体分为两部分,Server层和存储...但是长连接也有优化的空间,即长连接过多,随着执行大的查询操作,会占用较多的内存。 建立连接完成之后,连接器会判断该用户的权限,之后
  • mysql事件不执行的问题

    千次阅读 2018-11-12 15:32:00
    mysql事件不执行的问题 系统时间与数据库时间都查看了,都是正常的,但是配置上事件就是不执行! 原因出在没有开启event_scheduler!!! 1. 使用以下命令查看是否开启event_scheduler SHOW ...
  • MySql执行顺序及执行计划

    万次阅读 多人点赞 2019-03-06 12:41:12
    mysql执行sql的顺序从 From 开始,以下是执行的顺序流程 1、FROM table1 left join table2 on 将table1和table2中的数据产生笛卡尔积,生成Temp1 2、JOINtable2 所以先是确定表,再确定关联条件 3、ONtable1....
  • mysql执行多条语句

    万次阅读 2019-04-16 16:18:18
    最近因为删除信息的自增序列断裂问题,不得重新排序,也就是需要在java代码中执行多条sql语句。 问题引出 最开始,是这样做的 在mysql执行以上代码,发现序列重新排好了,详见:...
  • mysql怎么一次执行多条SQL语句?

    千次阅读 2021-01-18 20:29:13
    单独将$sql里面的内容放在phpmyadmin中执行正确,所以SQL语句应该是正确,估计连接方式那城出了问题请问如何写才能显示出来,谢谢!回复讨论(解决方案)我的本意是用php读mysql时,能像asp读mssql一样实现这样的写法...
  • MySQL数据库:SQL语句的执行过程

    万次阅读 多人点赞 2021-02-22 03:59:20
    我们的系统在和 MySQL 数据库进行通信前,需要先和数据库建立连接,而这个功能就是由MySQL驱动底层帮我们完成的,建立完连接之后,我们只需要发送 SQL 语句就可以执行 CRUD 了。如下图所示: 一次 SQL 请求就会...
  • MySQL中如何查看正在执行的SQL语句?

    千次阅读 2021-01-19 08:09:48
    【此为"一森咖记"公众号——第126篇文章】读完需要10分钟速读仅需5分钟【引言】如何在MySQL中查看正在执行的SQL语句有哪些,今天念叨下这件事。大家都知道,linux环境中很容易通过操作系统top看到执行时间长的进程...
  • MySQL命令执行sql文件的两种方法

    千次阅读 2021-09-28 23:16:21
    使用命令执行 sql 脚本文件 方法一,在 Windows 下使用 cmd 命令执行(或Unix或Linux控制台下) 【Mysql的bin目录】\mysql –u用户名 –p密码 –D数据库<【sql脚本文件路径全名】,示例: C:\MySQL\bin\mysql –...
  • Mysql查询历史SQL执行记录

    千次阅读 2021-09-23 11:23:49
    一、mysql查看正在执行的sql语句 show processlist; 二、mysql查看已经执行的历史sql语句(方法:开启日志模式) SETGLOBAL log_output ='TABLE';SETGLOBAL general_log ='ON'; //日志开启 SETGLOBAL log_output...
  • mysql自动执行任务(定时任务)

    千次阅读 2021-08-16 16:17:53
    首先我们创建一张表: CREATE TABLE `tb_user` ( `id` int(11) ... 点开计划:(每五秒执行一次) 点击保存即可: 这个时候点开表可以看到定时任务执行成功: 如果需要了关闭即可: SET GLOBAL event_scheduler = OFF
  • 该篇章将开始整理MySQL的优化,不过开始之前,我们想了解清楚那就是MySQL是怎么执行的。 文章目录1.MySQL驱动2.应用系统数据库连接池3.MySQL数据库连接池4.SQL执行过程4.1.线程监听:监听网络请求中的SQL语句4.2.SQL...
  • 登录到MySQL执行SQL语句

    万次阅读 2017-05-24 14:00:15
    一般来讲,我们在MySQL执行查询都是进入到mysql执行的,比如通过命令登录:$ mysql -u root -p Enter password: Welcome to the MySQL monitor. Commands end with ; or \g. Your MySQL connection id is 7 ...
  • mysql函数执行

    千次阅读 2019-11-21 18:11:42
    mysql函数执行的实例 CREATE DEFINER=`root`@`%` PROCEDURE `TrancateDay`() begin set @Sql1 := "truncate summary_day"; SET @Sql2 = "insert into summary_day (service) (select service from summary_minute...
  • MySQL如何执行SQL脚本文件?

    万次阅读 2020-04-30 20:10:30
    介绍什么是SQL脚本,如何书写SQL脚本,并怎么执行
  • Mysql删除数据时出现执行很慢并且删除失败的情况–线程堵塞 sql语句明明没错,报1205错误 解决办法: 数据库执行SQL语句 查询是哪个线程堵住了 SELECT * FROM information_schema.innodb_trx 查看trx_rows_locked 这一...
  • mysql总体上分为server层和存储引擎层 server层负包括连接器、缓存、解析器、优化器、执行器 存储引擎层则负责存储数据 连接器 连接器负责跟客户端建立连接、获取权限、维持和管理连接。 它首先会判断请求的账号和...
  • mysql -h主机ip -P数据库端口 -u用户名 -p密码 -D数据库名 -s -N -f < sql文件
  • mysql里面的event不执行的原因

    千次阅读 2018-03-10 10:33:20
    因为mysql的Event Scheduler 默认是开启的
  • MySQL执行外部sql脚本文件的命令

    万次阅读 2017-04-10 22:06:08
    MySQL执行外部sql脚本文件的命令 sql脚本是包含一到多个sql命令的sql语句,我们可以将这些sql脚本放在一个文本文件中(我们称之为“sql脚本文件”),然后通过相关的命令执行这个sql脚本文件。 1.创建...
  • Mysql查看执行计划

    万次阅读 多人点赞 2018-08-15 15:26:46
    使用explain关键字可以模拟优化器执行SQL查询语句,从而知道MySQL是如何处理你的SQL语句的,分析你的查询语句或是表结构的性能瓶颈。 explain执行计划包含的信息 其中最重要的字段为:id、type、key、rows、...
  • mysql命令行执行sql脚本文件

    万次阅读 2019-02-05 15:48:41
    在win7的Dos窗口使用mysql命令行的方式执行sql脚本文件,建议在系统变量中配置mysql的bin路径,这样在Dos窗口的任何目录都可以执行mysql命令。 1.进入Dos窗口,执行如下的命令 --ruoyi为用户,ruoyidb为创建脚本...
  • 一条SQL在MySQL中是如何执行

    万次阅读 2021-08-20 15:02:11
    主要包括连接器、查询缓存、分析器、优化器、执行器等,涵盖 MySQL 的大多数核心服务功能,以及所有的内置函数 (如日期、时间、数学和加密函数等),所有跨存储引擎的功能都在这一层实现,比如存储过程、触发器、...
  • MySQL执行计划 type类型

    千次阅读 2019-01-18 14:01:00
    MySql提供了EXPLAIN语法用来进行查询分析,在SQL语句前加一个"EXPLAIN"即可。 explain select * from t_settlement_settle_order_detail where id = 2; 下面来介绍各个字段: type:连接类型  system:...
  • 执行mysql语句卡死

    千次阅读 2018-10-17 17:32:47
    问题:执行ALTER TABLE table1 ADD COLUMN name text(10) NOT NULL;时,sql语句卡住动,如下图:   思路:  1、通过mysql日志查找原因,查log语句:select * from INFORMATION_SCHEMA.processlist where ...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 1,343,267
精华内容 537,306
关键字:

mysql执行不出来

mysql 订阅