面试题-Mysql基础
主页
标签
文章
### NOW()和CURRENT_DATE()有什么区别? NOW()命令用于显示当前年,月,日,时,分,秒。 CURRENT_DATE()仅显示当前年,月和日。 ### CHAR和VARCHAR的区别? 1.CHAR和VARCHAR类型在存储和检索方面有所不同 2.CHAR列长度固定为创建表时声明的长度,长度值范围是1到255 当CHAR值被存储时,它们被用空格填充到特定长度,检索CHAR值时需删除尾随空格。 ### 主键索引与唯一索引的区别 1. 主键是一种约束,唯一索引是一种索引,两者在本质上是不同的。 2. 主键创建后一定包含一个唯一性索引,唯一性索引并不一定就是主键。 3. 唯一性索引列允许空值,而主键列不允许为空值。 4. 主键列在创建时,已经默认为空值 ++ 唯一索引了。 5. 一个表最多只能创建一个主键,但可以创建多个唯一索引。 6. 主键更适合那些不容易更改的唯一标识,如自动递增列、身份证号等。 7. 主键可以被其他表引用为外键,而唯一索引不能。 ### 你怎么看到为表格定义的所有索引? SHOW INDEX FROM <tablename>; ### 数据库为什么使用B+树而不是B树 1. B树只适合随机检索,而B+树同时支持随机检索和顺序检索; 2. B+树空间利用率更高,可减少I/O次数,磁盘读写代价更低。B+树的内部结点并没有指向关键字具体信息的指针,只是作为索引使用,其内部结点比B树小,盘块能容纳的结点中关键字数量更多,一次性读入内存中可以查找的关键字也就越多,相对的,IO读写次数也就降低了。而IO读写次数是影响索引检索效率的最大因素; 3. B+树的查询效率更加稳定。B树搜索有可能会在非叶子结点结束,越靠近根节点的记录查找时间越短,只要找到关键字即可确定记录的存在,其性能等价于在关键字全集内做一次二分查找。而在B+树中,顺序检索比较明显,随机检索时,任何关键字的查找都必须走一条从根节点到叶节点的路,所有关键字的查找路径长度相同,导致每一个关键字的查询效率相当。 4. B+树的叶子节点使用指针顺序连接在一起,只要遍历叶子节点就可以实现整棵树的遍历。而且在数据库中基于范围的查询是非常频繁的,而B树不支持这样的操作。 5. 增删文件(节点)时,效率更高。因为B+树的叶子节点包含所有关键字,并以有序的链表结构存储,这样可很好提高增删效率。 ### 数据库三大范式是什么 第一范式:每个列都不可以再拆分。 第二范式:在第一范式的基础上,非主键列完全依赖于主键,而不能是依赖于主键的一部分。 第三范式:在第二范式的基础上,非主键列只依赖于主键,不依赖于其他非主键。 ### 怎么优化SQL查询语句 1. 对查询进行优化,应尽量避免全表扫描,首先应考虑在 where 及 order by 涉及的列上建立索引 2. 用索引可以提高查询 3. SELECT子句中避免使用*号,尽量全部大写SQL 4. 应尽量避免在 where 子句中对字段进行 is null 值判断,否则将导致引擎放弃使用索引而进行全表扫描,使用 IS NOT NULL 5. where 子句中使用 or 来连接条件,也会导致引擎放弃使用索引而进行全表扫描 6. in 和 not in 也要慎用,否则会导致全表扫描 ### 覆盖索引、回表等这些,了解过吗? 1、 覆盖索引: 查询列要被所建的索引覆盖,不必从数据表中读取,换句话说查询列要被所使用的索引覆盖。 2、 回表:二级索引无法直接查询所有列的数据,所以通过二级索引查询到聚簇索引后,再查询到想要的数据,这种通过二级索引查询出来的过程,就叫做回表。 ### 非聚簇索引一定会回表查询吗? 不一定,如果查询语句的字段全部命中了索引,那么就不必再进行回表查询 ### select for update有什么含义,会锁表还是锁行还是其他。 select查询语句是不会加锁的,但是select for update除了有查询的作用外,还会加锁,而且它是悲观锁。 没用索引/主键的话就是表锁,否则就是是行锁。 ### 你们数据库是否支持emoji表情存储,如果不支持,如何操作? 更换字符集utf8-->utf8mb4 ### 最左匹配原则? 在创建联合索引时候,一般需要遵循最左匹配原则。即联合索引中的属性识别度最高的放在查询语句的最前面。 ### 对于关系型数据库而言,索引是相当重要的概念,请回答有关索引的几个问题: **1. 索引的目的是什么?** 快速访问数据表中的特定信息,提高检索速度 创建唯一性索引,保证数据库表中每一行数据的唯一性。 加速表和表之间的连接 使用分组和排序子句进行数据检索时,可以显著减少查询中分组和排序的时间 **2. 索引对数据库系统的负面影响是什么?** 创建索引和维护索引需要耗费时间,这个时间随着数据量的增加而增加;索引需要占用物理空间,不光是表需要占用数据空间,每个索引也需要占用物理空间;当对表进行增、删、改、的时候索引也要动态维护,这样就降低了数据的维护速度。 **3. 为数据表建立索引的原则有哪些?** 在最频繁使用的、用以缩小查询范围的字段上建立索引。 在频繁使用的、需要排序的字段上建立索引 **4. 什么情况下不宜建立索引?** 对于查询中很少涉及的列或者重复值比较多的列,不宜建立索引。 对于一些特殊的数据类型,不宜建立索引,比如文本字段(text)等 ### 什么是最左前缀原则?什么是最左匹配原则? 最左前缀原则,就是最左优先,在创建多列索引时,要根据业务需求,where子句中使用最频繁的一列放在最左边。 当我们创建一个组合索引的时候,如(k1,k2,k3),相当于创建了(k1)、(k1,k2)和(k1,k2,k3)三个索引,这就是最左匹配原则。(其实K1,K3也可以走索引) ### 什么情况下设置了索引但无法使用 1. 以“%”开头的LIKE语句,模糊匹配 2. OR语句前后没有同时使用索引 3. 数据类型出现隐式转化(如varchar不加单引号的话可能会自动转换为int型)
上一篇: 没有文章
下一篇:
面试题-Mysql
Title
-
Artist
0:00