【面试复习】数据库 - mysql(下)

1、什么是数据库索引?索引有几种类型?

   索引:表一列或多列数据排序后的数据结构

   类型:  主键索引:不重复,不能有NULL;

                唯一索引:不重复,可以有NULL;

                普通索引:可重复,可以用NULL;

                全文索引:原来只有myisam支持,mysql 5.7.6 以后,innodb也支持了,主要是用来支持模糊查询的,like 本质上是全磁盘遍历 (ALL级别的搜索)非常吃性能,容易拖垮整个DB。

2、详细介绍下全文搜索

   一般模糊查询都选择使用 mysql -> binlog -> canal -> elasticsearch 来实现搜索;但如果搜索量特别低的时候(几千~几万),可以选择全文索引实现模糊搜索。mysql内置了ngram切词器,或者可以使用其他的切词器,将文本已各个词的形式保存在索引上。

   mysql关于全文索引的使用可以参考: https://www.cnblogs.com/tommy-huang/p/4483684.html

3、什么是最左前缀原则?

   假设有这样一个表:

1 CREATE TABLE `stu` (
2   `id` int(11) NOT NULL AUTO_INCREMENT,
3   `name` varchar(255) DEFAULT NULL,
4   `cid` int(11) DEFAULT NULL,
5   PRIMARY KEY (`id`),
6   KEY `idx_name_cid` (`name`,`cid`)
7 );

他在内部结构可以简单的用下面这种排列描述:

所以where查询时, where name = 'xxx' 和 where name = 'xxx' and cid = 'xxx' 都是有序查找,查找类型都是ref,因为 name与 name_cid都是有序的。但是 where cid='xxx' 则是无序的,需要遍历索引,查找类型为 index。

另外:(1)where 中 and 条件的先后顺序对如何选择索引是无关的。因为优化器会去分析判断选用哪个索引。

(2)MySQL 的执行计划和查询的实际执行过程并不完全吻合,可以分别用explain和trace工具来验证下

 

4、索引算法有哪些?有啥区别?

b+树与hash算法

BTree对于范围查找 >, <, >=, <=, between, like(不已一个通配符开头)的场景下明显优于hash;hash则在 = 上优于btree

 

5、索引设计的原则

(1)在where语句中经常被用到

(2)尽量选择不要太长

(3)选择的索引不应该有太多重复相同的部分

(4)不要过度使用索引

 

6、如何定位和优化sql语句性能

   定位一般使用 执行计划(explain)。explain查询的检索类型按照复杂度从大到小分别为: all(全表遍历) ,index(索引遍历),range(索引范围遍历),ref(索引算法查找,会重复),eq_ref(在join中使用主键或者唯一索引查找,且不允许为NULL),consts(对主键索引或者唯一索引查找)

  优化的手段:一般为建立索引,或者在已有索引的基础上,提交搜索type的等级,或者分库分表

 

7、分库分表

分表可以被分为:垂直分表:一个表里面的列太多了,可以将不常用到的列,统一放在一个exetr 的表内,实现垂直分表;

水平分表可以按照 id范围分表(range),Hash值(Hash), 地理区域,时间 分表

分库分表锁带来的问题有:

(1)分布式事务的问题,依赖数据库本身的分布式事务来执行事务,性能会非常受影响

(2)整张表的group by,order by, count 之类的统计会比较麻烦,只要在每个表按个执行,并最终汇总

(3)唯一id的问题,分库分表以后,不能再使用数据库的自增id了,可以考虑用带有时间戳的来代替(有递增的效果)

8、什么是最好的mysql分库分表方案?

(1)在应用层切分

(2)mysql代理层切分

(3)提供查找数据库分片的中心服务

9、数据库架构的演变:

  单库单表  ->   一主多从(为了应对越来越多的读请求,将他们都放到从库中,且从库可以扩容) -> 分库分表+主从

10、mysql中的in 和 exists

   https://cloud.tencent.com/developer/article/1144244

 

 



                                 

posted @ 2020-07-08 20:28  Demo12138  阅读(18)  评论(0编辑  收藏  举报