| |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
-> 大数据 -> MySQL经典题目整理(持续更新中) -> 正文阅读 |
|
[大数据]MySQL经典题目整理(持续更新中) |
目录
数据库的超键、候选键、主键、外键分别是什么?
数据库三大范式?
三大范式只是一般设计数据库的基本理念,可以建立冗余较小、结构合理的数据库。如果有特殊情况,当然要特殊对待,数据库设计最重要的是看需求跟性能,需求>性能>表结构。所以不能一味的去追求范式建立数据库。 一条 SQL 是怎么执行的?这就是考察我们对于 MySQL 数据库架构的知识: 首先客户端先请求连接,数据库连接池建立连接,查询权限,是否合法,然后查询缓存(8.0 版本之前),是否命中,命中就返回,否则进行解析器阶段,解析器阶段主要进行词法分析,分析 SQL 所用到的所有词,再由语法分析器完成 SQL 解析树,然后预处理器去进一步检查解析树是否合法,生成新的解析树,然后进入到查询优化器,或得最优执行计划,之后交给执行器执行查询计划,然后通过存储引擎到磁盘文件中查找并返回数据。 日常中你是怎么优化 SQL 的?利用索引啦,避免返回不必要的数据行啦,适当的分批量进行,优化 SQL 结构,分库分表啦 SQL 优化的一般步骤是啥?
你提到了索引,那么介绍一下MySQL 的索引?索引是帮助 MySQL 高效获取数据的有序的数据结构,排好序的快速查找数据结构。 在数据之外,数据库系统还维护着满足特定查找算法的数据结构,这些数据结构以某种方式引用指向数据,这样就可以在这些数据结构上实现高级查找算法,这种数据结构就是索引。 MySQL 索引为什么选择 B+ 树?因为从从没有索引开始,得全表遍历,但是数据越来越多,那么时间开销就会越来越大,这种情况下,我们就得建立一种数据结构,一种能够快速有效的通过映射来查询数据的数据结构,这就是 MySQL 中的索引。 首先我们想到普通二叉树,但是由于特殊情况,普通二叉树会变成一个链表,那和全表遍历效率没啥区别,那么使用哈希表呢?哈希表虽然查询速度优秀,但是它不能支持范围查询啊。所以我们开始使用一些特殊树结构,用红黑树,它的查找范围和查找速度都十分优秀,但是,如果数据特别大,那么这棵红黑树的结构也会特别大,深度不可控,所以,我们此时的重点就在找到一个可控深度的,支持范围查询的,查询时间稳定的数据结构,但是这样的数据结构,往往还是有一定的缺点,比如每次更新树结构的代价都很大。
所以,我们就又得找在 每个结点都作为一个磁盘页 B 树和B+ 树 的区别能说一下吗?上面那题回答得很清楚了:
聚簇索引与非聚簇索引的区别说一下呗?
使用索引的注意事项?
索引的优缺点?
啥时候不适合使用索引呢?表的数据很少的时候,毕竟 MySQL 还是挺厉害的,还有就是例如性别的那种字段,因为辨识度不高,还有频繁得进行增删改的表,因为重建索引很好性能。 limit 1000000 加载很慢的话,你是怎么解决的呢?如果 id 是连续的,我们可以返回上次查询的最大记录(偏移量),然后再往下 limit; 如果业务允许限制页数:那么就讨论业务,有没有必要这么分页,因为很多用户都不会去翻太多页的。
innodb和myisam这俩引擎的区别?
隔离级别都有啥呢?对应都有啥情况出现?
那么这几种出现的错误你来介绍一下吧?脏读:一个事务读到了别的事务未提交的数据。 不可重复读:一个事务范围内,两个相同的查询返回不同的结果。 幻读:一个事务查询范围结果集。另一个并发事务往这个范围中插入/删除了数据,并且提交,造成了前一个事务在提交之前再次查询这个范围读到的结果集不一样。 好,那么高并发情况下,如何做到安全的修改同一行数据呢?我们从同一行数据切入,要保证安全修改,那肯定同一时刻只能有一个线程修改它,别的线程只能等待。 那么这样的话,我们一般有两种概念锁可以解决,悲观锁和乐观锁。
提到 MVCC 啦?来回答一下吧MVCC (multi-version-concurrent-control)多版本并发控制,是一种并发控制的方法。 主要靠,事务版本号,表的隐藏字段( undo log 和 read view 来实现,通过这些东西的组合来解决读写冲突并且不加锁的问题。 在并发读写数据库时,可以做到在读操作时不用阻塞写操作,写操作也不用阻塞读操作,提高了数据库并发读写的性能 同时还可以解决脏读,幻读,不可重复读等事务隔离问题,但不能解决更新丢失问题。 你是如何理解 MySQL 的四大性质的?
他们在 MySQL 中是如何实现的?
数据库主键自增可能会出现什么问题?如果对数据库进行分库分表,很可能会出现主键重复的情况,但是理论上我们不允许主键重复,并且主键自增会产生表锁,引发主键用完的问题,简单点可以考虑使用 主从复制的步骤?
主从复制出现同步延迟的原因来说一下吧?emmm,也就是说一个服务器开放了 N 个连接给客户端来连接,这样的话会有高并发的更新操作,但是从服务器的里面读取 也就是说,从服务器可能会有慢 SQL 上表锁,导致其它要同步的 SQL 延迟运行。 那么有没有什么办法能够解决主从同步延迟呢?
说一说innodb日志吧?两种: 这俩日志的存放形式?
事务是如何通过日志来实现的?首先啊,事务在修改页的时候,要先将本次修改的 其次事务需要回滚的时候,因为有 如果有 commit 记录,就用 啥是存储过程啊?说一下呗存储过程:他就是一个预编译好的 SQL 语句或 SQL 语句块,这些 SQL 语句代码像 JAVA 中的方法一样会去实现一些功能(比如说对单表或者多表的增删改查),然后给这些代码块去一个名字,在用到的时候调用即可。 存储过程的优点有哪些呢?
存储过程的缺点又有哪些呢?
码云仓库同步笔记,可自取欢迎各位star指正:https://gitee.com/noblegasesgoo/notes
|
|
|
上一篇文章 下一篇文章 查看所有文章 |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 | -2024/11/24 12:05:31- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |