1.MySQL 的内连接、左连接、右连接有什么区别?
2.MySQL 索引是怎么实现的?
3.索引的优点和缺点—查询频率高的字段
4.B+树的特点和作用----必须先看 下面的网址
5.什么是聚集索引和非聚集索引
6.索引的分类
7.什么是最左前缀法则以及如何设计最左法则
8.怎么验证 MySQL 的索引是否满足需求
9.说一下 MySQL 常用的引擎?
10.MySQL由哪些部分组成, 分别用来做什么
11.说说对 SQL 语句优化有哪些方法 [必须背会
12.说一下 MySQL 的行锁和表锁?
13.说一下乐观锁和悲观锁?
14. MySQL 问题排查都有哪些手段?
15.什么是存储过程?用什么来调用?
1.MySQL 的内连接、左连接、右连接有什么区别?
内连接关键字:inner join;左连接:left join;右连接:right join。
内连接是把匹配的关联数据显示出来;
左连接是左边的表全部显示 出来,右边的表显示 出符合条件的数据;
右连接正好相反.
2.MySQL 索引是怎么实现的?
索引是满足某种特定查找算法的数据结构,而这些数据结构会以某种方式指向数据,从 而实现高效查找数据。
具体来说 MySQL 中的索引,不同的数据引擎实现有所不同,但目前主流的数据库引擎 的索引都是 B+ 树实现的,B+ 树的搜索效率,可以到达二分法的性能,找到数据区域之后 就找到了完整的数据结构了,所以索引的性能也是更好的。
3.索引的优点和缺点—查询频率高的字段
优势
1) 类似于书籍的目录索引,提高数据检索的效率,降低数据库的IO成本。
2) 通过索引列对数据进行排序,降低数据排序的成本,降低CPU的消耗。
劣势
1) 实际上索引也是一张表,该表中保存了主键与索引字段,并指向表的记录,所以索引列也是要占用空间的。
2) 虽然索引大大提高了查询效率,同时却也降低更新表的速度,如对表进行INSERT、UPDATE、DELETE。因为更新表时,MySQL 不仅要保存数据,还要保存一下索引文件每次更新添加了索引列的字段,都会调整因为更新所带来的键值变化后的索引信息。
4.B+树的特点和作用----必须先看下面的网址
漫画:什么是B-树?
链接1:
https://mp.weixin.qq.com/s?__biz=MzIxMjE5MTE1Nw==&mid=2653190965&idx=1&sn=53f78fa037386f85531832cd5322d2a0&chksm=8c9909efbbee80f90512f0c36356c31cc74c388c46388dc2317d43c8f8597298f233ca9c29e9&scene=21#wechat_redirect
链接2:
https://zhuanlan.zhihu.com/p/54084335漫画:什么是B+树?
链接1:
https://mp.weixin.qq.com/s?__biz=MzIxMjE5MTE1Nw==&mid=2653191027&idx=1&sn=4ba22e3ec8bd149f69fc0aba72e4347e&chksm=8c9909a9bbee80bfa1d8497ff0525df130414c1731b5aa5287bf16ea1cf86c8d8e6f20782184&scene=21#wechat_redirect
链接2:
https://zhuanlan.zhihu.com/p/54102723
5.什么是聚集索引和非聚集索引
在数据库的聚集索引(Clustered Index)中,叶子节点直接包含卫星数据。
在非聚集索引(NonClustered Index)中,叶子节点带有指向卫星数据的指针。
6.索引的分类
1)单值索引 :即一个索引只包含单个列,一个表可以有多个单列索引
2) 唯一索引 :索引列的值必须唯一,但允许有空值
3) 复合索引 :即一个索引包含多个列
4) 主键索引:
7.什么是最左前缀法则以及如何设计最左法则
MySQL中的索引可以以一定顺序引用多列,这种索引叫作联合索引。如User表的name和city加联合索引就是(name,city),而最左前缀原则指的是,如果查询的时候查询条件精确匹配索引的左边连续一列或几列,则此列就可以被用到。
在创建联合索引时,索引字段的顺序需要考虑字段值去重之后的个数,较多的放前面
8.怎么验证 MySQL 的索引是否满足需求
explain 查看 SQL 是如何执行查询语句的,从而分析你的索引是否满足需求。
explain 语法:explain select * from table where type=1。
9.说一下 MySQL 常用的引擎?
InnoDB支持 事务, MyISAM不支持
InnoDB支持 行级锁, MyISAM支持 表级锁.
InnoDB支持 外键, MyISAM不支持.
MyISAM支持 全文索引, InnoDB不支持(但可以使用Sphinx插件)
10.MySQL由哪些部分组成, 分别用来做什么
连接器: 管理连接, 权限验证.
分析器: 词法分析, 语法分析.
优化器: 执行计划生成, 索引的选择.
执行器: 操作存储引擎, 返回执行结果.
存储引擎: 存储数据, 提供读写接口.
11.说说对 SQL 语句优化有哪些方法 [必须背会
https://blog.csdn.net/biyusr/article/details/125599865
(1)Where 子句中:where 表之间的连接必须写在其他 Where 条件之前,那些可以过滤掉最大数量记录的条件必须写在 Where 子句的末尾.HAVING 最后。
(2)用 EXISTS 替代 IN、用 NOT EXISTS 替代 NOT IN。
(3)对查询进行优化,应尽量避免全表扫描,首先应考虑在 where 及 order by 涉及的列上建立索引。
(4)应尽量避免在 where 子句中对字段进行 null 值判断,否则将导致引擎放弃使用索引而进行全表扫描
(5)应尽量避免在 where 子句中对字段进行表达式操作,这将导致引擎放弃使用索引而进行全表扫描
12.说一下 MySQL 的行锁和表锁?
MyISAM 只支持表锁,InnoDB 支持表锁和行锁,默认为行锁。
表级锁:开销小,加锁快,不会出现死锁。锁定粒度大,发生锁冲突的概
率最 高,并发量最低。行级锁:开销大,加锁慢,会出现死锁。锁力度小,发生锁冲突的概率
小,并 发度最高。
13.说一下乐观锁和悲观锁?
乐观锁:每次去拿数据的时候都认为别人不会修改,所以不会上锁,但是
在提 交更新的时候会判断一下在此期间别人有没有去更新这个数据。悲观锁:每次去拿数据的时候都认为别人会修改,所以每次在拿数据的时
候都 会上锁,这样别人想拿这个数据就会阻止,直到这个锁被释放。数据库的乐观锁需要自己实现,在表里面添加一个 version 字段,每次修
改成功值加 1,这样每次修改的时候先对比一下,自己拥有的 version 和
数据库现在的 version 是否 一致,如果不一致就不修改,这样就实现了
乐观锁。
14. MySQL 问题排查都有哪些手段?
开启慢查询日志,查看慢查询的 SQL。
使用 explain 命令查询 SQL 语句执行计划。
15.什么是存储过程?用什么来调用?
存储过程是一个预编译的 SQL 语句,优点是允许模块化的设计,就是说只需创建一次,以后在该程序中就可以调用多次。
如果某次操作需要执行多次 SQL,使用存储过程比单纯 SQL 语句执行要快。
可以用一个命令call对象 来调用存储过程。