数据库常见面试题-更新中

数据库

1. 索引是什么
索引是一种利用某种规则的数据结构与实际数据的关系加快数据查找的功能,在查找的时候遵循索引的规则可以快速查找到对应数据的节点,从而达到快速查找数据的效果,类似中文大字典的目录
2. mysql中索引的分类有哪些

  1. B-Tree索引
    最常用的索引类型,适用于全键值、键值范围或键值前缀查找。
    可以提高等值查询、范围查询、排序和分组操作的性能。
    适用于InnoDB和MyISAM存储引擎。
  2. Hash索引
    基于哈希表实现,适合等值查询。
    查询效率非常高,特别是在等值比较时。
    不支持范围查询,也不支持排序和分组操作。
    适用于Memory存储引擎。
  3. R-Tree索引
    用于地理空间数据类型,如点、线和多边形等。
    适用于空间索引,可以快速定位空间数据。
    主要用于MyISAM存储引擎。
  4. Full-text索引
    用于全文搜索,可以快速查找文本中的关键词。
    支持InnoDB和MyISAM存储引擎。
    可以提高文本搜索的效率,但需要额外的配置和语法支持(如使用MATCH() … AGAINST())。
  5. Unique索引(唯一索引)
    保证索引列的所有值都是唯一的。
    可以提高查询效率,特别是在进行唯一性检查时。
    在InnoDB中,唯一索引也支持外键约束。

3. B+树和B树的区别
‌节点存储方式‌:
‌B树‌:内部节点(非叶子节点)和叶子节点都存储数据,即每个节点既可以存储键值,也可以存储对应的数据项。‌
‌B+树‌:只有叶子节点存储数据,内部节点仅存储键值,不存放具体的数据项,它们的作用是索引指向叶子节点的路径
查找效率‌:
‌B树‌:查找数据的效率不稳定,因为需要在各个节点上进行查找。‌
‌B+树‌:查找数据的过程从根节点到叶子节点结束,非叶子节点仅用于索引定位,查找效率更高。

4. mysql的索引结构
B+树

  • 为什么不用二叉树,红黑树,哈希表,B树

6. 聚集索引和非聚集索引的区别
‌索引数量‌:
聚集索引:每个表只能有一个聚集索引,通常为主键。‌
非聚集索引:每个表可以有多个非聚集索引。
‌查询性能‌:
聚集索引:由于数据行的物理顺序与索引顺序一致,查询数据速度快,特别是在范围查询和排序操作中表现尤为突出。
非聚集索引:查询时可能需要两次查找,先在索引中查找键值,再通过指针访问数据行,因此查询速度相对较慢

  • 回表查询是什么

    8. 覆盖索引是什么
    
    9. 索引下推
    
    10. 主键索引和辅助索引具体是什么
    
    11. 为什么建议用自增id做索引而不用UUID
    
    12. 主键索引使用int和string有啥区别
    

13. 缺少主键的话mysql怎么处理
设置主键或者新增新的列

  • 选什么字段当索引,索引何时失效

    15. 索引合并和复合索引的区别
    
  1. 简述事务

  2. 数据库事务并发会引发哪些问题

  3. 事务的四个隔离级别有哪些

  4. 什么是幻读,如何解决

  5. MySQL是如何保证ACID的

  6. MySQL支持的锁有哪些

  7. MVCC讲一下(怎么实现)

  8. 间隙锁讲一下

  9. 怎么实现可重复读(读提交)

  10. select … for update

  11. 乐观锁与悲观锁,mysql如何实现乐观锁

  12. MySQL中常见的几种日志

  13. MySQL主从复制的流程

  14. 关系型数据库与非关系型数据库的区别

30. 说一说drop、delete和truncate的共同点和区别
它们都能删除数据,但Drop会连同表结构及其依赖一起删除,而Truncate和Delete只删除数据。Delete操作可回滚,Truncate和Drop则不可。此外,Delete操作可能触发触发器,而Truncate和Drop不会,并且Drop的速度最快,Truncate次之,Delete最慢。

  1. 数据库3个范式

  2. MySQL中char和varchar的区别有哪些

  3. MySQL中inner join、left join、right join和full join的区别有哪些

34. MySQL的执行顺序
通常的逻辑执行顺序
FROM
首先,MySQL从FROM子句中的表开始,通常是查询的主表。
JOIN
然后,如果有JOIN操作,MySQL会进行表的连接。连接的顺序取决于JOIN的类型(如INNER JOIN, LEFT JOIN等)和可能的连接条件。
WHERE
下来,应用WHERE子句来过滤行。这一步在数据被选中并可能被连接后进行,有助于减少需要进一步处理的数据量。
GROUP BY
如果存在GROUP BY子句,MySQL将根据指定的列对结果集进行分组。
HAVING
接着,HAVING子句用于过滤分组后的结果。它是在分组之后应用的,类似于WHERE子句但在分组后使用。
SELECT
然后,选择列表(在SELECT中指定的列)被实际检索出来。在这一步,只会从表中检索出需要的列。
DISTINCT
如果使用了DISTINCT关键字,那么在这一步将去除重复的行。
ORDER BY
接下来是ORDER BY子句,它用于对结果集进行排序。排序通常在所有其他处理完成后进行。
LIMIT/OFFSET
最后,应用LIMIT和OFFSET子句来限制返回的行数或跳过一定数量的行。这对于分页查询非常有用。

35. having和where的区别
‌WHERE‌:
可以使用表中的字段作为筛选条件,但不能使用聚合函数。
不能使用字段的别名作为条件(除非在SELECT语句中先定义了别名)‌
‌HAVING‌:
可以使用聚合函数作为筛选条件,如SUM(), COUNT(), AVG()等。
可以使用字段的别名作为条件,因为别名是在分组后定义的‌

  1. MySQL的存储引擎,以及区别

  2. 大数据量里的分页查询怎么优化
    38. SQL的优化方法
    避免select * 创建索引 优化where语句 限制查询数量
    多用连接少用子查询 但是尽量避免大表的连接操作
    使用临时表

  3. MySQL中视图和表的区别

  4. 数据完整性约束

  5. group by的实现方式
    选择聚合函数:在GROUP BY语句中,你需要根据实际需求选择合适的聚合函数。例如,如果你不关心id的具体值,只是想获取不重复的记录,那么MIN()或MAX()都是不错的选择。但如果你需要基于特定条件选择记录(如最新记录),则可能需要结合其他字段和条件。
    性能考虑:对于大型数据集,GROUP BY可能会消耗较多的计算资源。因此,在实际应用中,应该考虑索引优化、查询优化等因素,以提高查询效率。
    数据完整性:GROUP BY去重只是查询层面的操作,不会改变数据库中的实际数据。如果需要永久删除重复数据,需要编写额外的SQL语句(如使用DELETE语句结合子查询)来实现。

原文链接:https://blog.csdn.net/qq_42397330/article/details/130218083

你可能感兴趣的:(数据开发小白成长笔记,数据库)