暂无图片
暂无图片
1
暂无图片
暂无图片
暂无图片

MySQL每日答题记录

原创 Root__Liu 2023-06-01
273

1、MySQL中查看表结构主要有哪些方式?            ABD

A、show create table tabl_name;

B、information_schema.columns

C、show table status like tabl_name;

D、desc tabl_name / explain tabl_name;


2、下列哪个命令可以在windows命令提示符下关闭mysql服务?    D

A、net start mysql

B、stop mysql

C、net stop

D、net stop mysql


3、下面MySQL哪种数字数据类型不可以存储数据256?    A

A、tinyint

B、smallint

C、int

D、bigint


为何对慢SQL进行治理

从数据库角度看:每个SQL执行都需要消耗一定I/O资源,SQL执行的快慢,决定资源被占用时间的长短。假设总资源是100,有一条慢SQL占用了30的资源共计1分钟。那么在这1分钟时间内,其他SQL能够分配的资源总量就是70,如此循环,当资源分配完的时候,所有新的SQL执行将会排队等待。 从应用的角度看:SQL执行时间长意味着等待,在OLTP应用当中,用户的体验较差

治理的优先级上

  1. master数据库->slave数据库

  • 目前数据库基本上都是读写分离架构,读在从库(slave)上执行,写在主库(master)上执行。

  • 由于从库的数据都是从主库上复制过去的,主库等待较多的,会加大与从库的复制时延。

  1. 执行次数多的SQL优先治理

  2. 如果有一类SQL高并发集中访问某一张表,应当优先治理。

Mysql执行原理

绿色部分为SQL实际执行部分,可以发现SQL执行2大步骤:解析,执行。

以com_query为例,dispatch_command会先调用alloc_query为query buffer分配内存,之后调用解析

解析:词法解析->语法解析->逻辑计划->查询优化->物理执行计划

检查是否存在可用查询缓存结果,如果没有或者缓存失效,则调用mysql_execute_command执行 执行:检查用户、表权限->表上加共享读锁->取数据到query cache->取消共享读锁


影响因素

如不考虑MySQL数据库的参数以及硬件I/O的影响, 则影响SQL执行效率的因素主要是I/O和CPU的消耗量 总结:

  1. 数据量:数据量越大需要的I/O次数越多

  2. 取数据的方式

  • 数据在缓存中还是在磁盘上

  • 是否可以通过索引快速寻址

  1. 数据加工的方式

  • 排序、子查询等,需要先把数据取到临时表中,再对数据进行加工

  • 增加了I/O,且消耗大量CPU资源

解决思路

  1. 将数据存放在更快的地方。

  • 如果数据量不大,变化频率不高,但访问频率很高,此时应该考虑将数据放在应用端的缓存当中或者Redis这样的缓存当中,以提高存取速度。如果数据不做过滤、关联、排序等操作,仅按照key进行存取,且不考虑强一致性需求,也可考虑选用NoSQL数据库。

  1. 适当合并I/O

  • 分别执行select c1 from t1与select c2 from t1,与执行select c1,c2 from t1相比,后者开销更小。

  • 合并时也需要考虑执行时间的增加。

  1. 利用分布式架构

  • 在面对海量的数据时,通常的做法是将数据和I/O分散到多台主机上去执行。

「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论