加入收藏 | 设为首页 | 会员中心 | 我要投稿 东莞站长网 (https://www.0769zz.com/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > MySql教程 > 正文

互联网公司面试必问的MySQL题目

发布时间:2019-03-18 02:48:00 所属栏目:MySql教程 来源:codeyuyu
导读:互联网公司面试必问的MySQL题目(上) 01什么是数据库事务?如果没有事物会有什么后果?事务的特性是什么? 事务是指作为单个逻辑工作单元执行的一系列操作,可以被看作一个单元的一系列SQL语句的集合。要么完全地执行,要么完全地不执行。 如果不对数据库进行

BTree是最常用的mysql数据库索引算法,也是mysql默认的算法。因为它不仅可以被用在=,>,>=,<,<=和between这些比较操作符上,而且还可以用于like操作符,只要它的查询条件是一个不以通配符开头的常量,

例如:

  1. select * from user where name like 'jack%'; 

如果一通配符开头,或者没有使用常量,则不会使用索引,例如:

  1. select * from user where name like '%jack'; 

Hash

Hash索引只能用于对等比较,例如=,<=>(相当于=)操作符。由于是一次定位数据,不像BTree索引需要从根节点到枝节点,最后才能访问到页节点这样多次IO访问,所以检索效率远高于BTree索引。

BTree索引是最常用的mysql数据库索引算法,也是mysql默认的算法。因为它不仅可以被用在=,>,>=,<,<=和between这些比较操作符上,而且还可以用于like操作符

例如:

只要它的查询条件是一个不以通配符开头的常量select * from user where name like 'jack%'; 如果一通配符开头,或者没有使用常量,则不会使用索引,例如: select * from user where name like '%jack';

Hash

Hash索引只能用于对等比较,例如=,<=>(相当于=)操作符。由于是一次定位数据,不像BTree索引需要从根节点到枝节点,最后才能访问到页节点这样多次IO访问,所以检索效率远高于BTree索引。

索引设计的原则?

  1. 适合索引的列是出现在where子句中的列,或者连接子句中指定的列
  2. 基数较小的类,索引效果较差,,没有必要在此列建立索引
  3. 使用短索引,如果对长字符串列进行索引,应该指定一个前缀长度,这样能够节省大量索引空间
  4. 不要过度索引。索引需要额外的磁盘空间,并降低写操作的性能。在修改表内容的时候,索引会进行更新甚至重构,索引列越多,这个时间就会越长。所以只保持需要的索引有利于查询即可。

如何定位及优化SQL语句的性能问题?

对于低性能的SQL语句的定位,最重要也是最有效的方法就是使用执行计划。

我们知道,不管是哪种数据库,或者是哪种数据库引擎,在对一条SQL语句进行执行的过程中都会做很多相关的优化,对于查询语句,最重要的优化方式就是使用索引。

而执行计划,就是显示数据库引擎对于SQL语句的执行的详细情况,其中包含了是否使用索引,使用什么索引,使用的索引的相关信息等。

互联网公司面试必问的MySQL题目

执行计划包含的信息

id

有一组数字组成。表示一个查询中各个子查询的执行顺序;

  1. id相同执行顺序由上至下。
  2. id不同,id值越大优先级越高,越先被执行。
  3. id为null时表示一个结果集,不需要使用它查询,常出现在包含union等查询语句中。

select_type

每个子查询的查询类型,一些常见的查询类型。

table

查询的数据表,当从衍生表中查数据时会显示 x 表示对应的执行计划id

partitions

表分区、表创建的时候可以指定通过那个列进行表分区。 举个例子:

  1. create table tmp ( 
  2.     id int unsigned not null AUTO_INCREMENT, 
  3.     name varchar(255), 
  4.     PRIMARY KEY (id) 
  5. ) engine = innodb 
  6. partition by key (id) partitions 5;  

互联网公司面试必问的MySQL题目

type(非常重要,可以看到有没有走索引)

访问类型

  • ALL 扫描全表数据
  • index 遍历索引
  • range 索引范围查找
  • index_subquery 在子查询中使用 ref
  • unique_subquery 在子查询中使用 eq_ref
  • ref_or_null 对Null进行索引的优化的 ref
  • fulltext 使用全文索引
  • ref 使用非唯一索引查找数据
  • eq_ref 在join查询中使用PRIMARY KEYorUNIQUE NOT NULL索引关联。

possible_keys

可能使用的索引,注意不一定会使用。查询涉及到的字段上若存在索引,则该索引将被列出来。当该列为 NULL时就要考虑当前的SQL是否需要优化了。

key

显示MySQL在查询中实际使用的索引,若没有使用索引,显示为NULL。

TIPS:查询中若使用了覆盖索引(覆盖索引:索引的数据覆盖了需要查询的所有数据),则该索引仅出现在key列表中

key_length

索引长度

ref

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

rows

返回估算的结果集数目,并不是一个准确的值。

extra

(编辑:东莞站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

热点阅读