Mysql专题Doris董

大体来说,MySQL可以分为Server层和存储引擎两部分。

存储引擎层负责:数据的存储和提取。其架构是插件式的,支持InnoDB、MyISAM等多个存储引擎。从MySQL5.5.5版本开始默认的是InnoDB,但是在建表时可以通过engine=MyISAM来指定存储引擎。不同存储引擎的表数据存取方式不同,支持的功能也不同。从上图中可以看出,不同的存储引擎共用一个Server层,也就是从连接器到执行器的部分。

2、一条SQL语句在数据库框架中的执行流程?

1.应用程序把查询SQL语句发送给服务器端执行;

2.查询缓存,如果查询缓存是打开的,服务器在接收到查询请求后,并不会直接去数据库查询,而是在数据库的查询缓存中找是否有相对应的查询数据,如果存在,则直接返回给客户端。只有缓存不存在时,才会进行下面的操作;

3.查询优化处理,生成执行计划。这个阶段主要包括解析SQL、预处理、优化SQL执行计划;

4.MySQL根据相应的执行计划完成整个查询;

5.将查询结果返回给客户端。

3、数据库的三范式是什么?1.第一范式:保证每列的原子性,即数据库表的每一列都是不可分割的原子数据项;

2.第二范式:要求每列的非主键字段必须完全依赖于主键字段,不能产生部分依赖。

3.第三范式:要求每列的非主键字段不能传递依赖于主键字段,只能直接依赖于主键字段(一张表只能描述一件事)

4、MySQL中的数据类型有哪些?

5、char和varchar的区别?

char(n):固定长度类型,比如:订阅char(10),当你输入"abc"三个字符的时候,它们占的空间还是10个字节,其他7个是空字节。char优点:效率高;缺点:占用空间;适用场景:存储密码的md5值,固定长度的,使用char非常合适。

varchar(n):可变长度,存储的值是每个值占用的字节再加上一个用来记录其长度的字节的长度。

所以,从空间上考虑varcahr比较合适;从效率上考虑char比较合适,二者使用需要权衡。

6、varchar(10)和varchar(20)的区别?

varchar(10)中10的涵义最多存放10个字符,varchar(10)和varchar(20)存储hello所占空间一样,但后者在排序时会消耗更多内存,因为orderbycol采用fixed_length计算col长度。

7、谈谈你对索引的理解?

1.在最频繁使用的、用以缩小查询范围的字段上建立索引;2.在频繁使用的、需要排序的字段上建立索引。

1.对于查询中很少涉及的列或者重复值比较多的列,不宜建立索引;2.对于一些特殊的数据类型,索引列数据内存占用多,不宜建立索引,比如:文本字段(text)等。

8、索引的底层使用的是什么数据结构?

索引的数据结构和具体存储引擎的实现有关,,在MySQL中使用较多的索引有Hash索引、B+树索引等。而我们经常使用的InnoDB存储引擎的默认索引实现为B+树索引。

9、谈谈你对B+树的理解?

1.B+树是基于B树和叶子节点顺序访问指针进行实现,它具有B树的平衡性,并且通过顺序访问指针来提高区间查询的性能。

2.在B+树中,一个节点中的key从左到右非递减排列,如果某个指针的左右相邻key分别是keyi和keyi+1,且不为null,则该指针指向节点的所有key大于等于keyi且小于等于keyi+1。

3.进行查找操作时,首先在根节点进行二分查找,找到一个key所在的指针,然后递归地在指针所指向的节点进行查找。直到查找到叶子节点,然后在叶子节点上进行二分查找,找出key所对应的data。

4.插入、删除操作会破坏平衡树的平衡性,因此在插入删除操作之后,需要对树进行一个分裂、合并、旋转等操作来维护平衡性。

10、为什么InnoDB存储引擎选用B+树而不是B树呢?

用B+树不用B树考虑的是IO对性能的影响,B树的每个节点都存储数据,而B+树只有叶子节点才存储数据,所以查找相同数据量的情况下,B树的高度更高,IO更频繁。数据库索引是存储在磁盘上的,当数据量大时,就不能把整个索引全部加载到内存了,只能逐一加载每一个磁盘页(对应索引树的节点)。

11、谈谈你对聚簇索引的理解?

聚簇索引是对磁盘上实际数据重新组织以按指定的一个或多个列的值排序的算法。特点是存储数据的顺序和索引顺序一致。一般情况下主键会默认创建聚簇索引,且一张表只允许存在一个聚簇索引。

聚簇索引的叶子节点就是数据节点,而非聚簇索引的叶子节点仍然是索引节点,只不过有指向对应数据块的指针。

12、谈谈你对哈希索引的理解?

InnoDB存储引擎有一个特殊的功能叫“自适应哈希索引”,当某个索引值被使用的非常频繁时,会在B+树索引之上再创建一个哈希索引,这样就让B+Tree索引具有哈希索引的一些优点,比如:快速的哈希查找。

13、谈谈你对覆盖索引的认识?

如果一个索引包含了满足查询语句中字段与条件的数据就叫做覆盖索引。具有以下优点:

1.索引通常远小于数据行的大小,只读取索引能大大减少数据访问量。2.一些存储引擎(例如:MyISAM)在内存中只缓存索引,而数据依赖于操作系统来缓存。因此,只访问索引可以不使用系统调用(通常比较费时)。3.对于InnoDB引擎,若辅助索引能够覆盖查询,则无需访问主索引。

14、索引的分类?

1.树索引(O(log(n)))2.Hash索引

1.聚集索引(clusteredindex)2.非聚集索引(non-clusteredindex)

1.普通索引2.唯一索引3.主键索引4.联合索引5.全文索引

14、谈谈你对最左前缀原则的理解?

MySQL使用联合索引时,需要满足最左前缀原则。下面举例对其进行说明:

1.一个2列的索引(name,age),对(name)、(name,age)上建立了索引;2.一个3列的索引(name,age,sex),对(name)、(name,age)、(name,age,sex)上建立了索引。1.B+树的数据项是复合的数据结构,比如:(name,age,sex)的时候,B+树是按照从左到右的顺序来建立搜索树的,比如:当(小明,22,男)这样的数据来检索的时候,B+树会优先比较name来确定下一步的所搜方向,如果name相同再依次比较age和sex,最后得到检索的数据。但当(22,男)这样没有name的数据来的时候,B+树就不知道第一步该查哪个节点,因为建立搜索树的时候name就是第一个比较因子,必须要先根据name来搜索才能知道下一步去哪里查询。

2.当(小明,男)这样的数据来检索时,B+树可以用name来指定搜索方向,但下一个字段age的缺失,所以只能把名字等于小明的数据都找到,然后再匹配性别是男的数据了,这个是非常重要的性质,即索引的最左匹配特性。

关于最左前缀的补充:

1.最左前缀匹配原则会一直向右匹配直到遇到范围查询(>、<、between、like)就停止匹配,比如:a=1andb=2andc>3andd=4如果建立(a,b,c,d)顺序的索引,d是用不到索引的。如果建立(a,b,d,c)的索引则都可以用到,a、b、d的顺序可以任意调整。

2.=和in可以乱序,比如:a=1andb=2andc=3建立(a,b,c)索引可以任意顺序,MySQL的优化器会优化成索引可以识别的形式。

15、怎么知道创建的索引有没有被使用到?或者说怎么才可以知道这条语句运行很慢的原因

使用Explain命令来查看语句的执行计划,MySQL在执行某个语句之前,会将该语句过一遍查询优化器,之后会拿到对语句的分析,也就是执行计划,其中包含了许多信息。可以通过其中和索引有关的信息来分析是否命中了索引,例如:possilbe_key、key、key_len等字段,分别说明了此语句可能会使用的索引、实际使用的索引以及使用的索引长度。

16、什么情况下索引会失效?即查询不走索引?

下面列举几种不走索引的SQL语句:

1.索引列参与表达式计算:

SELECT'sname'FROM'stu'WHERE'age'+10=30;2.函数运算:

SELECT'sname'FROM'stu'WHERELEFT('date',4)<1990;3.%词语%--模糊查询:

SELECT*FROM'manong'WHERE`uname`LIKE'码农%'--走索引SELECT*FROM'manong'WHERE`uname`LIKE"%码农%"--不走索引4.字符串与数字比较不走索引:

CREATETABLE'a'('a'char(10));EXPLAINSELECT*FROM'a'WHERE'a'="1"--走索引EXPLAINSELECT*FROM'a'WHERE'a'=1--不走索引,同样也是使用了函数运算5.查询条件中有or,即使其中有条件带索引也不会使用。换言之,就是要求使用的所有字段,都必须建立索引:

select*fromdeptwheredname='xxx'orloc='xx'ordeptno=45;6.正则表达式不使用索引。7.MySQL内部优化器会对SQL语句进行优化,如果优化器估计使用全表扫描要比使用索引快,则不使用索引。

17、查询性能的优化方法?

1.只返回必要的列:最好不要使用SELECT*语句。

2.只返回必要的行:使用LIMIT语句来限制返回的数据。

3.缓存重复查询的数据:使用缓存可以避免在数据库中进行查询,特别在要查询的数据经常被重复查询时,缓存带来的查询性能提升将会是非常明显的。

1.最有效的方式是使用索引来覆盖查询。

18、InnoDB和MyISAM的比较?1.事务:MyISAM不支持事务,InnoDB支持事务;

2.全文索引:MyISAM支持全文索引,InnoDB5.6之前不支持全文索引;

3.关于count(*):MyISAM会直接存储总行数,InnoDB则不会,需要按行扫描。意思就是对于selectcount(*)fromtable;如果数据量大,MyISAM会瞬间返回,而InnoDB则会一行行扫描;

4.外键:MyISAM不支持外键,InnoDB支持外键;

5.锁:MyISAM只支持表锁,InnoDB可以支持行锁。

19、谈谈你对水平切分和垂直切分的理解?

水平切分是将同一个表中的记录拆分到多个结构相同的表中。当一个表的数据不断增多时,水平切分是必然的选择,它可以将数据分布到集群的不同节点上,从而缓存单个数据库的压力。

垂直切分是将一张表按列切分成多个表,通常是按照列的关系密集程度进行切分,也可以利用垂直切分将经常被使用的列和不经常被使用的列切分到不同的表中。例如:将原来的电商数据库垂直切分成商品数据库、用户数据库等。

20、主从复制中涉及到哪三个线程?

主要涉及三个线程:binlog线程、I/O线程和SQL线程。

1.binlog线程:负责将主服务器上的数据更改写入二进制日志(Binarylog)中。

2.I/O线程:负责从主服务器上读取二进制日志,并写入从服务器的重放日志(Relaylog)中。

3.SQL线程:负责读取重放日志并重放其中的SQL语句。

21、主从同步的延迟原因及解决办法?

实际上主从同步延迟根本没有什么一招制敌的办法,因为所有的SQL必须都要在从服务器里面执行一遍,但是主服务器如果不断的有更新操作源源不断的写入,那么一旦有延迟产生,那么延迟加重的可能性就会原来越大。当然我们可以做一些缓解的措施。

1.我们知道因为主服务器要负责更新操作,它对安全性的要求比从服务器高,所有有些设置可以修改,比如sync_binlog=1,innodb_flush_log_at_trx_commit=1之类的设置,而slave则不需要这么高的数据安全,完全可以将sync_binlog设置为0或者关闭binlog、innodb_flushlog、innodb_flush_log_at_trx_commit也可以设置为0来提高SQL的执行效率。2.增加从服务器,这个目的还是分散读的压力,从而降低服务器负载。

22、谈谈你对数据库读写分离的理解?读写分离常用代理方式来实现,代理服务器接收应用层传来的读写请求,然后决定转发到哪个服务器。主服务器处理写操作以及实时性要求比较高的读操作,而从服务器处理读操作。

1.主从服务器负责各自的读和写,极大程度缓解了锁的争用;

2.从服务器可以使用MyISAM,提升查询性能以及节约系统开销;

3.增加冗余,提高可用性。

23、请你描述下事务的特性?

1.原子性:事务是最小的执行单位,不允许分割。事务的原子性确保动作要么全部完成,要么完全不起作用;

2.一致性:执行事务前后,数据库从一个一致性状态转换到另一个一致性状态。

3.隔离性:并发访问数据库时,一个用户的事物不被其他事务所干扰,各并发事务之间数据库是独立的;

4.持久性:一个事务被提交之后。它对数据库中数据的改变是持久的,即使数据库发生故障也不应该对其有任何影响。

24、谈谈你对事务隔离级别的理解?

1.READ_UNCOMMITTED(未提交读):最低的隔离级别,允许读取尚未提交的数据变更,可能会导致脏读、幻读或不可重复读;

2.READ_COMMITTED(提交读):允许读取并发事务已经提交的数据,可以阻止脏读,但是幻读或不可重复读仍有可能发生;

3.REPEATABLE_READ(可重复读):对同一字段的多次读取结果都是一致的,除非数据是被本身事务自己所修改,可以阻止脏读和不可重复读,但幻读仍有可能发生;

4.SERIALIZABLE(串行化):最高的隔离级别,完全服从ACID的隔离级别。所有的事务依次逐个执行,这样事务之间就完全不可能产生干扰,也就是说,该级别可以防止脏读、不可重复读以及幻读。但是这将严重影响程序的性能。通常情况下也不会用到该级别。

25、解释下什么叫脏读、不可重复读和幻读?

表示一个事务能够读取另一个事务中还未提交的数据。比如:某个事务尝试插入记录A,此时该事务还未提交,然后另一个事务尝试读取到了记录A。

是指在一个事务内,多次读同一数据,得到的数据不一致,是由于其他事务修改了这条数据。

指同一个事务内多次查询返回的结果集不一样。比如同一个事务A第一次查询时候有n条记录,但是第二次同等条件下查询却有n+1条记录,这就好像产生了幻觉。发生幻读的原因也是另外一个事务新增或者删除或者修改了第一个事务结果集里面的数据,同一个记录的数据内容被修改了,所有数据行的记录就变多或者变少了。

26、MySQL默认的隔离级别是什么?

MySQL默认采用的REPEATABLE_READ隔离级别。Oracle默认采用的READ_COMMITTED隔离级别。

27、谈谈你对MVCC的了解?

1.读-读:不存在任何问题,也不需要并发控制;

2.读-写:有线程安全问题,可能会造成事务隔离性问题,可能遇到脏读,幻读,不可重复读;

3.写-写:有线程安全问题,可能会存在更新丢失问题。

1.在并发读写数据库时,可以做到在读操作时不用阻塞写操作,写操作也不用阻塞读操作,提高了数据库并发读写的性能;

2.同时还可以解决脏读,幻读,不可重复读等事务隔离问题,但不能解决更新丢失问题。

28、说一下MySQL的行锁和表锁?

MyISAM只支持表锁,InnoDB支持表锁和行锁,默认为行锁。

表级锁:开销小,加锁快,不会出现死锁。锁定粒度大,发生锁冲突的概率最高,并发量最低。

行级锁:开销大,加锁慢,会出现死锁。锁力度小,发生锁冲突的概率小,并发度最高。

29、InnoDB存储引擎的锁的算法有哪些?

1.Recordlock:单个行记录上的锁;

2.Gaplock:间隙锁,锁定一个范围,不包括记录本身;

3.Next-keylock:record+gap锁定一个范围,包含记录本身。

30、MySQL问题排查都有哪些手段?1.使用showprocesslist命令查看当前所有连接信息;

2.使用Explain命令查询SQL语句执行计划;

3.开启慢查询日志,查看慢查询的SQL。

31、MySQL数据库CPU飙升到500%的话他怎么处理?

1.列出所有进程showprocesslist,观察所有进程,多秒没有状态变化的(干掉);

2.查看超时日志或者错误日志(一般会是查询以及大批量的插入会导致CPU与I/O上涨,当然不排除网络状态突然断了,导致一个请求服务器只接受到一半。

THE END
1.“节约“汉语词典在线查词语“节约“ - 汉语词典在线查词语关于词语大全:使用本系统可以轻松查询词语的意思,目前已收录词语共30多万条。请输入要查询的词语,将显示该词语的解释。https://cha.100why.cn/ciyu/Search/%E8%8A%82%E7%BA%A6
2.俭节,俭节有哪些词语1,俭节有哪些词语 勤俭 节约 勤勉 不会啊 真的 2,节俭是什么意思 节俭的意思,不是吝啬,也不是不要“适当地改善自己的生活,有节制地满足自己合理的物质要求”,而是反对“无节制地信手乱花”。 3,怎么做到节约节俭节制 节约节俭节制; 节约:节约形成的条件必然要有“浪费”,只要找到浪费的地方、把他简化或者去http://www.lystu.com/xdx/gxzs/104228.html
3.节约近义词节约有哪些近义词近义词近义词6: 节俭 词语解释:节省俭约,用财有度。如:「节俭是一种传统美德」《书经.无逸》「即康功田功」句下汉.孔安国.传:「文王节俭,卑其衣服,以就其安人之功」 近义词7: 节流 词语解释:减省开销支出。【造句】:开源节流减省开支。如:「开源节流」。 近义词8: 节省 词语解释:节约俭省。【造句】:由https://m.zcdian.com/jyc/h8fueo.html
4.关于节约的谜语,要增资先节约打一字节约的谜语有哪些 出差不忘节约(部门单位场所)外务省 /出门必须节约(部门单位场所)外务省 /当家人懂得节约(部门单位场所)内务省 /节约差旅费(部门单位场所)省银行 /要节约每一个铜板(部门单位场所)省文联 /一定要节约(部门单位场所)日内务省 /大锅饭不利于节约(财经词语)伙食费 /节约人人称好(财经词语)省优 https://www.1566.cn/miyu/9570.html
5.节约的近义词和反义词是什么,有哪些词语意思:消耗:~时间。~人力物力。 例句:成本耗费在哪里? 4.浪费 意思:对人力、财物、时间等用得不当或没有节制:不要~水。 例句:浪费者浪费之人,尤指浪费钱财的人;败家子。 词语:节约 拼音:jié yuē 意思:节省(多用于较大的范围):增产~。~时间。http://cidian.xuexiaodaquan.com/jinfanyici/cib002d0db411611eb8f01246e9609f010.html
6.厉行节约反对浪费主题班会教案(精选15篇)3、答一答,请10位同学答一答有关世界粮食日的相关知识,答对的同学可获得小奖品。 4、想一想,为世界粮食日拟定几个宣传标语,突出“爱惜粮食,节约粮食”的主题,并请6位同学读一读自己拟好的标语,同学之间可以相互点评交流。 5、诵一诵,由主持人带头,全班集体朗诵《珍惜粮食》的诗歌。 http://www.jiaoyubaba.com/jiaoan/77884.html
7.节省的相关词节省词典反查节省相关联的词语有哪些?节省的相关词有:东撙西节、主机租赁、俭不中礼、俭可以助廉、俭用、光纤通信、克紧、减省、删略、喷浆法、廉俭(共30个)节省,拼音是 jié shěng,意思是 使可能被耗费掉的不被耗费掉或少耗费掉:节省时间。 节省劳动力。节省开支。 点击查看更多一、二、三、四、五、六年级的http://mcidian.gei6.com/fc__8k0cl8bo.html
8.形容谣言的四字词语形容家庭关系的四字词例句: 有风有化,宜室宜家。(明·汤显祖《牡丹亭》第七出) 10 其他_ 和睦\和美 家和万事兴 夫妻举案齐眉\相敬如宾\夫唱妇随 天伦共享 天伦之乐 2.关于家庭的四字词语有哪些 扶老携幼、相亲相爱、相敬如宾、勤俭持家、父慈子孝。 1、扶老携幼 https://blog.csdn.net/weixin_29062865/article/details/112561054
9.节约粮食的佳句?词语有?词语有? 一、节约粮食的佳句? 节约粮食的佳句有:1、点滴节约,汇成千顷良田;粒粒粮食,重铸人类文明。2、节约粮食,从我做起。一粒米,一滴汗,一份责任。让我们共同守护地球家园的粮食资源。节约粮食,是我们每个公民应尽的义务,甚至可以说,人类的生活说平越高,就越要有节约粮食的意识,要存有节约的意识,我们的https://www.gaokao.cn/gk/30815
10.节约资源的词语爱问知识人节衣缩食,俭省,省吃俭用,俭朴,艰苦朴素,节俭,简约,朴实,节流,俭省,节约,紧紧手,年年有https://iask.sina.com.cn/b/newqKV4InA3rCL.html
11.俭字组词大全带俭的词语有哪些俭存奢失、俭逼、乞俭、灾俭、俭静、俭苦、俭年、俭幕、刻俭、疏俭、俭刻、积俭、俭汰、俭莲、劬俭、空俭、俭克、克俭、俭确、俭葬、俭简、俭陋、恭俭、俭岁、俭饿、俭凋、俭恪、俭谨、俭宝、俭然、俭节、俭政、俭貌、俭设、还可以根据词语的字数、字的位置、组词是否为成语来分类查看组词信息https://www.zhcidian.com/cidian/zuci/3225.html