MySQL——索引和执行计划和慢查询

对SQL慢查询的优化(MySQL) 一、慢查询原因 要对慢查询进行优化,首先要搞清楚慢查询的原因,原因主要有三: (1)加载了不需要的数据列 (2)查询条件没有命中索引 (3)数据量太大 二、优化方案 优化也是针对这三个方向的: (1)先分析语句,看看是否加载了额外的数据,可能是查询了多余的行并且抛弃掉了,可能是加载了许多结果中并不需要的列,如果有这些问题,则对语句进行分析、重写 (2)分析语句的执行计划,获得其使用索引的情况,然后修改语句或修改索引,使得语句尽可能地命中索引 (3)如果对语句的优化都已经无法进行了,可以考虑 阅读详情

目录

常见索引模型

索引分类

聚簇索引

主键索引

非聚簇索引

普通索引

唯一索引

全文索引

联合索引

前缀索引

空间索引

覆盖索引

Explain

慢查询

Show Profiles


常见索引模型

索引分类

聚簇索引

主键索引

在Innodb中,Mysql中的数据是按照主键的顺序来存放的。那么聚簇索引就是按照每张表的主键来构造一颗B+树,叶子节点存放的就是整张表的行数据。由于表里的数据只能按照一颗B+树排序,因此一张表只能有一个聚簇索引。

在Innodb中,聚簇索引默认就是主键索引。

假如表没有设定主键,则按照下列规则来创建聚簇索引

没有主键时,会用一个唯一且不为空的索引列做为主键,成为此表的聚簇索引。

如果没有这样的索引,InnoDB会隐式定义一个主键来作为聚簇索引。

 
例如现有一个主键列为id的user表,表中有字段 t 和 name,并且在 t 上有索引。
建表语句如下:

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

非聚簇索引

普通索引

如下user建表语句中的 t 就是一个普通索引,普通索引与主键索引的区别在于,普通索引的叶子节点存放的不是行数据,而是主键值。
 
例如现有一个主键列为id的user表,表中有字段 t 和 name,并且在 t 上有索引。建表语句如下:

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

例如:

select * from user where t=100;

这个查询sql会通过 t 这个普通索引在自身的 B+ 树上找到对应主键:1,然后再使用1在主键索引所在的B+树上查询出真实表的行数据后返回结果,这个操作被称为回表。

唯一索引

与普通索引类似,不同点在于唯一索引的索引列的值必须唯一,但允许有空值,这点与主键不同(主键索引列的值唯一,但不能为空)。

如果是多个字段组成的联合索引,则列值的组合必须唯一,创建方法与普通索引类似。

全文索引

5.6版本之后InnoDB存储引擎开始支持全文索引,Mysql允许在char、varchar、text类型上建立全文索引。
 
Mysql支持三种模式的全文检索模式

1.自然语言模式:通过match against 传递某个特定的字符串进行检索
2.布尔模式:可以为检查的字符串增加操作符,布尔操作符可以通过以下sql语句查看:

show variables like '%ft_boolean_syntax%';

3.查询扩展模式:当查询的关键字太短,用户需要隐含知识时进行。

例如,对于单词operating system的查询,用户可能希望查询的结果除了包含operating system的文档,还应该包含linux,windows,unix的单词。这种查询会分2次执行检索,第1次是使用给定的operating system的短语进行检索,第2次结合第一次相关性比较高的进行检索。

联合索引

使用多个列字段建立的索引,称为联合索引,也叫组合索引。
联合索引为:(t,name)

其建表语句如下:

create table user(
id int primary key,
t int not null,
name varchar(16),
index(t),
index(t,name) )engine=innodb;

说到联合索引,一定要谈谈最左匹配原则,假设联合索引由列(a,b,c)组成,则以下顺序满足最左前缀规则:a、ab、abc;。

所谓最左匹配原则指的就是如果 SQL 语句中用到了联合索引中的最左边的索引,那么这条 SQL 语句就可以利用这个联合索引去进行匹配,值得注意的是,当遇到范围查询(>、<、between、like)就会停止匹配。

(1)设定表T已建立联合索引(id, name)

where条件为:id = 1 或者id = 1 and name = 'tom',满足联合索引的最左匹配原则,是可以匹配索引来执行sql的;where条件为:name = 'tom' and id = 1,也满足联合索引的最左匹配原则,因为Mysql优化器会自动调整id,name的顺序与索引顺序一致,这样就能用到联合索引了。

where条件为:name = 'tom'不满足联合索引的最左匹配原则,也就无法使用(id, name)的联合索引了。
(2)设定表T已建立联合索引(a, b, c, d)

where条件为:a = 10 and b = 20 and c >100 and d = 5
这个where条件,只有a, b, c能使用到联合索引,d无法使用索引,因为c>100属于范围查询,将后面d的索引匹配给中断了。

生效条件

(1) select * from table where a=3 and b=5 and c=4; ---- abc顺序

abc三个索引都在where条件里面用到了,而且都发挥了作用。

(2) select * from table where c=4 and b=6 and a=3;

where里面的条件顺序在查询之前会被mysql自动优化,效果跟上一句一样。

(3) select * from table where a=3 and c=7; ---- 没有b,中间断点,阻塞了c的索引

a用到索引,b没有用,所以c是没有用到索引效果的。

(4) select * from table where a=3 and b>7 and c=3; ---- b范围值,断点,阻塞了c的索引

a用到了,b也用到了,c没有用到,这个地方b是范围值,也算断点,只不过自身用到了索引。

(5) select * from table where b=3 and c=4; --- 联合索引必须按照顺序使用,并且需要全部使用

因为a索引没有使用,所以这里 bc都没有用上索引效果。

(6) select * from table where a>4 and b=7 and c=9; ---- a范围值,断点,阻塞了b c的索引

a用到了 b没有使用,c没有使用。

(7) select * from table where a=3 order by b;

a用到了索引,b在结果排序中也用到了索引的效果,a下面任意一段的b是排好序的

(8) select * from table where a=3 order by c; ---- 没有b,中间断点,阻塞了c的索引

a用到了索引,但是这个地方c没有发挥排序效果,因为中间断点了。

(9) select * from table where b=3 order by a; --- 需要全部使用

b没有用到索引,排序中a也没有发挥索引效果。

(10) select * from table where b=3 and c=2 order by a;

a b c都没有用到索引。

失效条件

  • 不在索引列上做任何操作(计算、函数、(自动or手动)类型转换),会导致索引失效而转向全表扫描;
  • 存储引擎不能使用索引范围条件右边的列;
  • 尽量使用覆盖索引(只访问索引的查询(索引列和查询列一致)),减少select *;
  • mysql在使用不等于(!=或者<>)的时候无法使用索引会导致全表扫描;
  • is null,is not null也无法使用索引;
  • like以通配符开头(’%abc…’)mysql索引失效会变成全表扫描的操作。

问题:解决like‘%字符串%’时索引不被使用的方法?

  • 字符串不加单引号索引失效

SELECT * from staffs where name='2000'; -- 因为mysql会在底层对其进行隐式的类型转换

SELECT * from staffs where name=2000; --- 未使用索引

前缀索引

当索引列的字符比较多时,索引很大且速度很慢,此时可以优化索引列,只索引列开始的部分字符串,以此节约索引空间,提高索引效率。

前缀索引的使用原则是:降低重复的索引值
例如有以下一张学生表,st_num为学号

从上表可以发现 st_num 字段前7位都是重复的,都是以0102021开头的。

如果使用前1-7位字符来做前缀索引就会出现大量索引值重复的情况。

此时索引值重复性高,查询效率低下,不符合前缀索引的原则,因此可以依据具体需求来决定使用前8-10位字符来做前缀索引。
前缀索引创建方式如下:

create table `student` (
`st_num` varchar(255) not null,
`sex` int(10) not null,
`name` varchar(255) not null,
index (st_num(8))
)engine=InnoDB;

空间索引

空间索引是对空间数据类型的字段建立的索引,MYSQL使用SPATIAL关键字进行扩展,使其能够在空间数据类型的语法上创建空间索引。

CREATE TABLE tb_geo(
id INT PRIMARY KEY AUTO_INCREMENT,
NAME VARCHAR(128) NOT NULL,
pnt POINT NOT NULL,
SPATIAL INDEX `spatIdx` (`pnt`)
)ENGINE=InnoDB DEFAULT CHARSET=utf8;

覆盖索引

还是以上述例子来讲解,现将下列查询语句:

select * from student where name='Candy';

修改为:

select s_id from student where name='Candy';

这时只需要查 s_id 的值,而 s_id 的值已经在普通索引 name上了,因此可以从非聚簇索引B+树上直接返回查询结果,不需要回表操作。

也就是说,在这个查询里面,索引name已经覆盖了我们的查询需求,因此称为覆盖索引。


由于覆盖索引可以减少树的搜索次数,显著提升查询性能,所以使用覆盖索引是一个常用的性能优化手段。

Explain

用法:explain SQL语句;

结果有十二列:

idselect查询序列号,从大到小执行,相同从上往下执行
select_type

select语句的类型

(1) SIMPLE(简单SELECT,不使用UNION或子查询等)

(2) PRIMARY(子查询中最外层查询,查询中若包含任何复杂的子部分,最外层的select被标记为PRIMARY)

(3) UNION(UNION中的第二个或后面的SELECT语句)

(4) DEPENDENT UNION(UNION中的第二个或后面的SELECT语句,取决于外面的查询)

(5) UNION RESULT(UNION的结果,union语句中第二个select开始后面所有select)

(6) SUBQUERY(子查询中的第一个SELECT,结果不依赖于外部查询)

(7) DEPENDENT SUBQUERY(子查询中的第一个SELECT,依赖于外部查询)

(8) DERIVED(派生表的SELECT, FROM子句的子查询)

(9) UNCACHEABLE SUBQUERY(一个子查询的结果不能被缓存,必须重新评估外链接的第一行)

table

查询的表,有时不是真实的表名字,可能是简称,也可能是第几步执行的结果的简称
partitions显示匹配的分区
type

对表访问方式,表示MySQL在表中找到所需行的方式,又称“访问类型”。

常用的类型有: ALL、index、range、 ref、eq_ref、const、system、NULL(从左到右,性能从差到好)

ALL:Full Table Scan, MySQL将遍历全表以找到匹配的行

index: Full Index Scan,index与ALL区别为index类型只遍历索引树

range:只检索给定范围的行,使用一个索引来选择行

ref: 表示上述表的连接匹配条件,即哪些列或常量被用于查找索引列上的值

eq_ref: 类似ref,区别就在使用的索引是唯一索引,对于每个索引键值,表中只有一条记录匹配,简单来说,就是多表连接中使用primary key或者 unique key作为关联条件

const、system: 当MySQL对查询某部分进行优化,并转换为一个常量时,使用这些类型访问。如将主键置于where列表中,MySQL就能将该查询转换为一个常量,system是const类型的特例,当查询的表只有一行的情况下,使用system

NULL: MySQL在优化过程中分解语句,执行时甚至不用访问表或索引,例如从一个索引列里选取最小值可以通过单独索引查找完成。

possible_keys

指出MySQL能使用哪个索引在表中找到记录,查询涉及到的字段上若存在索引,则该索引将被列出,但不一定被查询使用(该查询可以利用的索引,如果没有任何索引显示 null)

该列完全独立于EXPLAIN输出所示的表的次序。这意味着在possible_keys中的某些键实际上不能按生成的表次序使用。
如果该列是NULL,则没有相关的索引。在这种情况下,可以通过检查WHERE子句看是否它引用某些列或适合索引的列来提高你的查询性能。如果是这样,创造一个适当的索引并且再次用EXPLAIN检查查询

key

key列显示MySQL实际决定使用的键(索引),必然包含在possible_keys中,如果没有选择索引,键是NULL。要想强制MySQL使用或忽视possible_keys列中的索引,在查询中使用FORCE INDEX、USE INDEX或者IGNORE INDEX。

key_len

表示索引中使用的字节数,可通过该列计算查询中使用的索引的长度(key_len显示的值为索引字段的最大可能长度,并非实际使用长度,即key_len是根据表定义计算而得,不是通过表内检索出的)

不损失精确性的情况下,长度越短越好

ref列与索引的比较,表示上述表的连接匹配条件,即哪些列或常量被用于查找索引列上的值
rows估算出结果集行数,表示MySQL根据表统计信息及索引选用情况,估算的找到所需的记录所需要读取的行数
filtered按表条件过滤的行百分比
extra

该列包含MySQL解决查询的详细信息,有以下几种情况:

Using where:不用读取表中所有信息,仅通过索引就可以获取所需数据,这发生在对表的全部的请求列都是同一个索引的部分的时候,表示mysql服务器将在存储引擎检索行后再进行过滤。

Using temporary:表示MySQL需要使用临时表来存储结果集,常见于排序和分组查询,常见 group by ; order by。

Using filesort:当Query中包含 order by 操作,而且无法利用索引完成的排序操作称为“文件排序”

-- 测试Extra的filesort
explain select * from emp order by name;

Using join buffer:改值强调了在获取连接条件时没有使用索引,并且需要连接缓冲区来存储中间结果。如果出现了这个值,那应该注意,根据查询的具体情况可能需要添加索引来改进能。

Impossible where:这个值强调了where语句会导致没有符合条件的行(通过收集统计信息不可能存在结果)。

Select tables optimized away:这个值意味着仅通过使用索引,优化器可能仅从聚合函数结果中返回一行

No tables used:Query语句中使用from dual 或不含任何from子句

-- explain select now() from dual;

总结:

  • EXPLAIN不会告诉你关于触发器、存储过程的信息或用户自定义函数对查询的影响情况
  • EXPLAIN不考虑各种Cache
  • EXPLAIN不能显示MySQL在执行查询时所作的优化工作
  • 部分统计信息是估算的,并非精确值
  • EXPALIN只能解释SELECT操作,其他操作要重写为SELECT后查看执行计划。

慢查询

相关配置项:

slow_query_log:ON/OFF 默认是OFF

slow_query_log_file:/var/lib/mysql/hostname-slow.log日志存放路径

long_query_time:10时间阙值,默认10s

log_queries_not_using_indexes:未使用索引的查询是否记录到慢日志中,ON/OFF,默认关

log_output:日志存储方式,file/table,默认是file,表的话是写入到mysql.slow_log表

表字段:

time查询时间
user@Host用户账号和ip 线程id
query_time

执行话费时长 时间是秒

lock_time执行获取锁的时间
rows_sent活得结果的行数
rows_examined扫描的行数
SET timestamp执行的具体时间  
SQL语句

日志分析工具:mysqldumpslow

-s                                                                 排序                                                        
al执行时获取锁时长平均值
ar返回行数的平均值
at查询时长的平均值
c查询次数
l获取锁时长
r获得返回行数
t执行总时长
-t num返回几行
-g pattern后面跟正则 筛选

例子:

1.取出耗时最长的两条SQL:

格式:mysqldumpslow -s t -t 2 慢日志文件

mysqldumpslow -s t -t 2 /var/lib/mysql/localhost-slow.log

参数分析:

  • Count:出现次数;
  • Time:执行最长时间(累计总耗费时间);
  • Lock:等待锁的时间;
  • Rows:发送给客户端的行总数(扫描的行总数);
  • 用户以及sql语句本身(抽象了一下格式, 比如 limit 1, 20 用 limit N,N 表示)。

2.取出查询次数最多,且使用了in关键字的1条SQL:

mysqldumpslow -s c -t 1 -g 'in' /var/lib/mysql/localhost-slow.log;

3.得到返回记录集最多的10个SQL:

mysqldumpslow -s r -t 10 /var/lib/mysql/localhost-slow.log

4.得到访问次数最多的10个SQL:

mysqldumpslow -s c -t 10 /var/lib/mysql/localhost-slow.log

5.得到按照时间排序的前10条里面含有左连接的查询语句。

mysqldumpslow -s t -t 10 -g “left join” /var/lib/mysql/localhost-slow.log

另外建议在使用这些命令时结合 | 和more 使用 ,否则有可能出现刷屏的情况。

mysqldumpslow -s r -t 20 /mysqldata/mysql/mysql06-slow.log | more

慢查询优化建议:

1、日期大小的比较,传到xml中的日期格式要符合'yyyy-MM-dd',这样才能走索引,如:'yyyy'改为'yyyy-MM-dd','yyyy-MM'改为'yyyy-MM-dd'【这样MYSQL会转换为日期类型】

2、条件语句中无论是等于、还是大于小于,WHERE左侧的条件查询字段不要使用函数或表达式或数学运算

3、WHERE条件语句尝试着调整字段的顺序提升查询速度,如把索引字段放在最前面、把查询命中率高的字段置前等

4、保证优化SQL前后其查询结果是一致的

5、在查询的时候通过将EXPLAIN命令写在查询语句前,测试语句是否有走索引【具体用法百度】

6、禁止使用SELECT * FROM操作,应只返回需要的字段,不需要的字段不要返回

7、可以尝试分解复杂的查询,在应用层面进行表关联,以此代替SQL层面的表关联

8、WHERE子句和ORDER BY子句涉及到的列建索引

9、避免在WHERE子句中对字段进行NULL判断【可以对表字段改造一下,字符串型字段默认值设置为空字符串,数字型字段默认值设置为0,日期型字段默认值设置为1990-01-01等】

10、避免在WHERE子句中使用!=或<>操作符

11、避免在WHERE子句中使用OR操作符

12、BETWEEN AND代替IN

13、LIKE '%abc%'不会走索引,而LIKE 'abc%'会走索引

14、避免对字段进行表达式操作

15、避免对字段进行函数操作

16、GROUP BY操作默认会对GROUP BY后面的字段进行排序,如果你的程序不需要排序,可在GROUP BY语句后面加上ORDER BY NULL去除排序

17、如果是数值型字段,则尽量设计为数值型字段,不要为了方便、为了偷懒而给后面维护的同事埋坑

18、表中所有字段设计为NOT NULL

19、返回条数固定时,用LIMIT语句限制返回记录的条数,如只需要一条记录,或肯定只有一条记录符合条件,那建议加上LIMIT 1

20、对于枚举类型的字段【即有固定罗列值的字段】,建议使用ENUM而不是VARCHAR,如性别、星期、类型、类别等

21、对于存IP地址的字段设计为成UNSIGNED INT型

22、避免在SQL中使用NOW()、CURDATE()、RAND()函数【因为这种方式会导致MYSQL无法使用SQL缓存】,可以转化为通过传入参数的方式

23、对于统计类的查询【如查询连续几个月的数据总量,或查询同比、环比等】,可以通过定时查询并统计到统计表的方式提高查询速度

SQL优化是个很复杂的过程,有可能出现拆东墙补西墙的情况,比如给数据库表加入了索引之后,确实查询快了,可是存储空间加多了,插入删除操作耗时也增加了。如果在一个写多读少的系统中,执行这种优化可能会起到反效果。以优化完之后千万不能大意,要持续监控系统,防止出现引入新瓶颈的情况。

Show Profiles

分析当前会话中SQL语句执行的资源消耗情况的工具,可用于SQL调优的测量。默认情况下处于关闭状态,并保存最近15次的运行结果。

profiling:ON/OFF,默认关闭
profiling_history_size:默认保存15条查询记录

show profile [参数1,参数2...] for query Query_ID;查看这条SQL语句的执行情况:

 

show profile的常用查询参数 

①ALL:显示所有的开销信息。

②BLOCK IO:显示块IO开销。

③CONTEXT SWITCHES:上下文切换开销。

④CPU:显示CPU开销信息。

⑤IPC:显示发送和接受开销信息。

⑥MEMORY:显示内存开销信息。

⑦PAGE FAULTS:显示页面错误开销信息。

⑧SOURCE:显示和Source_function,Source_file,Source_line相关的开销信息。

⑨SWAPS:显示交换次数开销信息。

需要注意的结果值

①converting  HEAP to MyISAM:查询结果太大,内存不够,数据往磁盘上搬了。

②Creating tmp table:创建临时表。先拷贝数据到临时表,用完后再删除临时表。

③Copying to tmp table on disk:把内存中临时表复制到磁盘上,危险!!!

④locked。

 show profile诊断结果中出现了以上4条结果中的任何一条,则sql语句需要优化。

MySQL深入学习——第五章 慢查询&索引优化实战学习笔记 一、什么是慢查询? 慢查询日志,顾名思义,就是查询慢的日志,是指mysql记录所有执行超过long_query_time参数设定的时间阈值的SQL语句的日志。该日志能为SQL语句的优化带来很好的帮助。默认情况下,慢查询日志是关闭的,要使用慢查询日志功能,首先要开启慢查询日志功能。 1、慢查询配置 1.1、慢查询基本配置 slow_query_log 启动停止技术慢查询日志 slow_qu... 阅读详情

相关推荐

envi5.3处理高分二号影像数据详细过程记录

全文根据此篇文章进行数据处理: tm影像辐射定标_高分二号影像数据预处理及裁剪过程 其他参考: 学习笔记---遥感影像辐射定标与大气校正 利用ENVI自带全球DEM数据计算区域平均高程 高分二号数据处理流程(有高分二号的数据信息) GF2有多光谱和全色两个数据,MSS是多光谱的,PAN是全色的,多光谱的分辨率低,全色的高,需要把这两个数据融合,融合之前需要做定标等处理,获取经纬度。 一、多光谱影像处理 1. 辐射定标 以这个为例: 其他路径\2022.4.2...

ligous的博客 5万+

MySQL 语句中执行优先级——and比or高

转: MySQL 语句中执行优先级——and比or高 2017年04月20日 13:33:03 十步行 阅读数:7381 版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.youkuaiyun.com/u011064736/article/details/70257366 MySQL中,AND的执行优先级高于OR。也就是说,在没有小括号(...

weixin_30716141的博客 442

vTaskStartScheduler()详解

是启动 FreeRTOS 实时内核的“扳机”。在调用它之前,你只是创建了一些任务结构,但它们都处于“待命”状态,系统仍然在按传统的裸机前后台方式运行。调用这个函数后,FreeRTOS 内核会接管系统的控制权,开始根据优先级调度你创建的任务,多任务环境才真正开始。关键点:它没有参数。它的所有行为都由中的配置宏控制。它通常不会返回。一旦调用,除非没有任务可以运行(或者你显式地停止了调度器),否则程序流永远不会回到main()函数中调用它的下一行。是一个没有参数但行为由精密控制的函数。

Shylock_Mister的博客 1592

在MySQL执行查询时出现了慢查询情况,应该如何解决?

在MySQL执行查询时出现了慢查询情况,应该如何解决?MySQL是一种流行的关系型数据库管理系统,但在处理大量数据时,可能会出现慢查询问题。通过使用EXPLAIN命令、慢日志和监视工具等技术,可以诊断出导致MySQL慢查询问题的原因。优化措施包括创建索引、使用联合查询、优化数据库服务器配置、减少查询返回数据的数量和优化数据库表。通过这些方法,我们可以大大提高MySQL查询性能,并更好地满足应用程序需求。

ZP1008yy的博客 4060

hcaptcha无感验证码逆向实战:从接口分析到环境补全

本文详细解析了hcaptcha无感验证码的逆向实战过程。通过分析核心接口与加密逻辑,重点介绍了采用环境补全策略来模拟真实浏览器环境,从而绕过验证码检测。文章提供了从接口抓包、剖析hsw.js加密核心到使用Node.js搭建模拟环境的完整步骤,为自动化操作提供了一种稳健的解决方案。

weixin_29324401的博客 1151

31、MSP430FR2355时钟系统与低功耗模式解析

本文详细解析了MSP430FR2355的时钟系统和低功耗模式。首先介绍了时钟系统的组成,包括XT1振荡器、DCO、MODCLK、MCLK、SMCLK和ACLK的功能与配置方法。接着探讨了MSP430FR2355的五种低功耗模式及其配置要点,并分析了时钟系统与低功耗模式之间的协同关系。最后通过实际应用案例展示了如何在具体场景中优化系统功耗。文章旨在帮助开发者充分利用MSP430FR2355的时钟与低功耗特性,实现高性能、低功耗的嵌入式系统设计。

mars5的博客 195

数据库索引abc,请问查询哪些字段能命中索引

查询语句:select * from table where a=?也就是说,一旦遇到范围查询,索引只能用到该字段为止。的条件会在索引层面被提前过滤,减少了回表的记录数,提高查询效率。但开启索引下推后,存储引擎在遍历索引时,会同时检查。的记录,而无需将这些记录回表查询完整数据后再过滤。会命中索引,但索引的使用会在这里中断。不参与索引的范围定位,但通过索引下推,的条件可以通过 “索引下推”过滤。无法直接使用索引进行匹配。的条件,直接过滤掉不满足。

qq_73181349的博客 286

Grafana 可视化配置

Grafana 可视化操作使用

原名又逢乱世。不要放下学习的脚步,毕竟比天天打牌、钓鱼、打游戏更能从内在充实自己。 1940

MySQL索引

MySql,数据库,索引,B+树

weixin_56738054的博客 2430

【30】软考软件设计师——UML类图与用例图满分精讲|下午第3题常考核心

本文是《软件设计师·50讲通关|从零基础到工程师职称》专栏第30篇,聚焦**模块四:应用技术(下午题)第3道高频大题**,UML建模是历年下午必考核心,单题分值稳定10~12分。全文深度拆解两大核心UML图表:**类图**与**用例图**,超详细讲解类图三层结构、可见性修饰符、五大核心关系(泛化/关联/依赖/聚合/组合)的判定标准与绘图规范;吃透用例图参与者、系统边界、三大关系(包含/扩展/泛化)的底层逻辑,搭配独家**关系秒杀口诀、标准绘图模板、真题改错技巧**;全文适配补图、判断关系、分析场景、纠错优化

专注于人工智能、软件开发、工控自动化、工厂数字化及智能化等领域,希望和大家共同进步! 572

2026年北京君正数字IC笔试试卷带答案

本文摘要:该文档是一份数字IC设计相关的考试试题,包含单选题、多选题、波形分析题和代码设计题。内容涵盖时序约束、半导体工艺、状态机设计、逻辑综合、异步FIFO设计等知识点。试题解析详细,重点考察数字电路基础、时序分析和Verilog代码实现能力。典型题目包括多周期路径设置、Moore/Mealy状态机区别、同步复位与异步复位特性、RISC-V架构特点等,并提供了异步FIFO的Verilog实现参考代码。(149字)

Open 112

mysql使用了索引还是慢_技术分享 | MySQL优化:为什么SQL走索引还那么慢?

作者:胡呈清背景2019-01-11 9:00-10:00 一个 MySQL 数据库把 CPU 打满了。硬件配置:256G 内存,48 core分析过程接手这个问题时现场已经不在了,信息有限,所以我们先从监控系统中查看一下当时的状态。从 PMM 监控来看,这个 MySQL 实例每天上午九点 CPU 都会升高到 10%-20%,只有 1 月 2 号 和 1 月 11 号 CPU 达到 100%,也就...

weixin_32216791的博客 762

智能园艺:AI Agent控制的室内种植系统

随着城市化进程的加速和人们对健康生活的追求,室内种植逐渐成为一种流行的生活方式。然而,传统的室内种植方式往往需要人工进行大量的监测和管理,效率低下且难以保证植物的生长质量。智能园艺:AI Agent控制的室内种植系统旨在利用先进的人工智能技术和传感器设备,实现室内种植的自动化和智能化管理,提高种植效率和植物生长质量。本系统的范围涵盖了从植物生长环境的监测到种植过程的自动化控制,包括温度、湿度、光照、土壤水分等环境参数的实时监测,以及灌溉、施肥、通风等种植操作的自动执行。

AI天才研究院 783

mysql 调优 (慢查询,执行计划和索引)

在程序中难免会遇到查询很慢,有时你知道你哪个SQL, 有时 你可能调用其他的api不知道SQL,那么你可以用mysql 的慢查询 再结合EXPLAIN 的执行计划,看看SQL有没有走索引再优化。 1,MYSQL 慢查询默认是不支持,可以在mysql 客户端 show variables like '%slow%'; 查看 2,修改mysql的启动配置文件my.cnf ...

shrek11的专栏 541

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

IMSL CNL 7.0.0 (x86-64)Crack

IMSL CNL 7.0.0 (x86-64)Crack intel的算法库破解文件,这是C++版本的破解文件

MySQL锁的类型 事务的基本特性和隔离级别 ACID靠什么保证 什么是MVCC 主从同步原理 MyISAM和InnoDB的区别 索引类型及影响 执行计划怎么看 慢查询优化

MySQL锁的类型 事务的基本特性和隔离级别 ACID靠什么保证 什么是MVCC 主从同步原理 MyISAM和InnoDB的区别 索引类型及影响 执行计划怎么看 慢查询优化

zwb的博客 361

RU DOS版、EFI版32bit/64bit BIOS常用工具

DOS版、EFI版的RU工具,可用来查看IO、MEM、PCI、SMBIOS等资源。亲测在EFI SHELL下可用。

Python进阶----索引原理,mysql常见的索引,索引的使用,索引的优化,不能命中索引的情况,explain执行计划,慢查询和慢日志, 多表联查优化...

Python进阶----索引原理,mysql常见的索引,索引的使用,索引的优化,不能命中索引的情况,explain执行计划,慢查询和慢日志, 多表联查优化 一丶索引原理 什么是索引: 索引在MySQL中也称作'键',是存储引擎用于快速找到记录的一种数据结构.索引对于良好的性能非常关键,尤其是当表中的数据量越来越大时,索引对于性能的影响愈发更重要. ​索引优化是对查...

dayinji1212的博客 384

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

python不能使用索引运算的是_Python进阶----索引原理,mysql常见的索引,索引的使用,索引的优化,不能命中索引的情况,explain执行计划,慢查询和慢日志, 多表联查优化...

Python进阶----索引原理,mysql常见的索引,索引的使用,索引的优化,不能命中索引的情况,explain执行计划,慢查询和慢日志, 多表联查优化一丶索引原理什么是索引:索引在MySQL中也称作'键',是存储引擎用于快速找到记录的一种数据结构.索引对于良好的性能非常关键,尤其是当表中的数据量越来越大时,索引对于性能的影响愈发更重要.​索引优化是对查询性能优化的手段,索引能够轻易...

weixin_39771775的博客 558

慢查询、慢查询优化、索引失效

1.什么是慢查询? 所有执行时间超过 long_query_time 秒的所有查询或不适用于索引的查询。 2.long_query_time默认时间是10秒,即超过10秒的查询都认为是慢查询。 3.慢查询日志默认名称:主机名-slow.log 4.除了查看my.ini文件以外通过 show variables like '%quer%' 查看 4.1 slow_query_log:表示是否开启慢查询日志。(默认开启) 开启后查询是慢查询,则该查询记录会存储到slow_...

m0_60552721的博客 5076

高并发下Mysql慢查询和执行计划分析

MySQL数据库自带的一个功能,用于记录执行时间超过指定阈值的SQL语句,以便于后续的性能优化工作帮助开发和DBA发现哪些SQL语句需要优化,在哪些地方需要修改,以提高数据库的性能默认情况下MySQL数据库是不开启慢查询日志的,long_query_time的默认值为10(即10秒,通常设置为1秒)慢查询日志记录SQL语句相关信息执行时间、执行次数、告警时间、执行的SQL语句、使用的索引、扫描的行数、等待锁的时间Time:表示日志记录的时间。

Yweir的博客 1329

mysql慢查询优化

定位低效 SQL 执行慢有两种情况: 偶尔慢:DB 在刷新脏页 redo log 写满了 内存不够用,要从 LRU 链表中淘汰 MySQL 认为系统空闲的时候 MySQL 关闭时 一直慢的原因:索引没有设计好、SQL 语句没写好、MySQL 选错了索引 ’mysql慢查询优化 第一步:开启mysql慢查询日志,通过慢查询日志定位到执行较慢的SQL语句。 第二步:利用explain关键字可以模拟优化器执行SQL查询语句,来分析SQL查询语句。 第三步:通过查询的结果进行优化。 优化方式 (1)首先分

weixin_45615504的博客 7661

面试笔记——MySQL(优化篇:定位慢查询、SQL执行计划、索引、SQL优化)

因为,当在进行分页查询时,如果执行 limit 9000000,10 ,此时需要MySQL排序前9000010 记录,仅仅返回 9000000 - 9000010 的记录,其他记录丢弃,查询排序的代价非常大。是指一个索引包含了查询语句所需的所有列,从而使得查询可以直接从索引中获取所需的数据,而无需回表查询。覆盖索引通常用于查询语句的列与索引列完全匹配的情况。最左前缀法则(或最左前缀匹配)指的是当一个查询包含了多列的复合索引时,查询条件查询从索引的最左前列开始,并且不跳过索引中的列。

Z__XY_的博客 1886

【MySQL | 第八篇】在MySQL中,如何定位慢查询以及对应解决方法?

在MySQL中,如何定位慢查询以及对应解决方法?

踢桃的成长之路 2070

记一次关于 Mysql 中 text 类型和索引问题引起的慢查询的定位及优化

最近有用户反馈产品有些页面加载比较慢,刚好我在学习 Mysql 相关知识,所以先从 Mysql 慢查询日志开始定位: step1:通过慢查询日志定位具体 SQL 首先通过 SHOW VARIABLES like 查看当前 Mysql 服务器关于慢查询的具体配置信息: slow_query_log = ON # 慢查询日志处于开启状态,所以可以直接查询 slow_q...

zdplife的专栏 1万+

MySQL索引优化实战从慢查询到高性能的蜕变之路

找到慢查询后,下一步是使用`EXPLAIN`命令或更详细的`EXPLAIN FORMAT=JSON`来分析其执行计划。如果一个索引包含了查询所需的所有字段(即在`SELECT`子句、`WHERE`子句、`GROUP BY`子句等中用到的所有列),MySQL就可以直接从索引中获取数据,而无需回表查询数据行。如果`ORDER BY`或`GROUP BY`子句的字段顺序与联合索引的顺序一致,并且索引的方向(升序/降序)也一致,MySQL就可以利用索引来排序,避免耗时的“Using filesort”操作。

lovejade654的博客 524

MySQL进阶之索引

索引:是帮助MySQL高效获取数据的数据结构(有序的)。在数据之外,数据库系统嗨维护着满足特定查找算法的数据结构,这些数据结构以某种方式引用(指向)数据,这样就可以在这些数据结构上实现高级查找算法,这种数据结构就是索引。哈希索引就是采用一定的hash算法,将键值换算成新的hash值,映射到对应的槽位上2. 特点Hash索引只能用于对等比较,不支持范围查询;无法利用索引完成排序操作:查询效率高,通知只需要一次检索就可以了,效率通常高于B+tree索引。

jiuxiandd的博客 1690

MySQL慢查询优化

MySQL数据库慢查询优化

freelooppowter的博客 318
上一篇: MySQL——内存结构和执行原理
下一篇: Java——笔记
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值