| |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
-> 大数据 -> 52.整理MySQL -> 正文阅读 |
|
[大数据]52.整理MySQL |
为什么要使用数据库?数据如果保存在内存:存取速度快,但数据不能永久保存 数据保存在文件:数据永久保存,速度比内存操作慢,频繁IO,查询数据也不方便 数据保存在数据库:数据永久保存,使用sql语句查询很方便,管理数据方便 数据库的三大范式?列不可分,非主键列完全依赖于主键,非主键列不依赖于其他非主键,这三大范式是递进关系,比如第二范式需要在第一范式的基础上 MyISAM对于Innodb引擎的区别?
MyISAM:适用于以读写插入为主的应用程序,比如博客系统 Innodb:更新(删除)操作频率高,或者要保证数据完整性,并发量高,支持事务和外键,比如电商后台 MyISAM和InnoDB索引的区别?
索引是什么?优缺点?使用场景?索引是特殊的文件,包含着对数据表里所有记录的引用指针,相当于目录 优点:加快数据检索速度,在查询过程中,提高性能 缺点:创建和维护索引需要耗费时间,具体的,当对表中数据进行增加,删除和修改的时候,索引也需要动态的维护,降低了效率;索引还需要占用额外的空间 使用场景:
索引的类型?
索引的数据结构?B树索引(实际是使用b+树实现):主键索引时,一次检索直接拿到数据,非普通索引查询时,拿到主键id,再拿到具体数据(二次检索) 哈希索引:使用hash算法,将数据库字段数据转换成定长的hash值,使用拉链法解决hash冲突,只能进行等值比较,不能使用like,=,>=等符号,但是等值比较的检索效率远远大于b树索引 创建索引的原则?
为什么数据库使用b+树而不是b树?b树只适合随机检索,而b+树支持随机检索和顺序检索 b+树空间利用率高,可以减少io次数,磁盘读写代价更低,因为它的内部节点作为索引使用,使得其能容纳的节点中的关键字数量更多 b+树的查询效率更加稳定,因为所有的数据都要在叶子节点才能找到 b+树的叶子节点包含所有关键字,并以有序链表结构存储,可以提高增删效率 b+树对于范围查询,只需找到范围的一边,然后进行有序遍历链表即可 聚簇索引和非聚簇索引?非聚簇索引是否一定要回表查询?聚簇索引:数据和索引放一起,找到了索引也就找到了数据 非聚簇索引:数据和索引分开,索引结构的叶子节点指向了数据对应行
非聚簇索引不一定会回表查询,如果查询语句要求的字段都是索引的内容,就不必要再进行回表查询例如select age from employee where age < 20; mysql中in和exists的区别?in语句把外表和内标当做hash连接,exists语句对外表循环,每次循环再对内表进行查询 如果两个表大小相当,那么使用两者差别不大 如果两个表中一个小,一个大,此时子查询表大的使用exists,小的使用in not in和not exists:如果查询语句使用了not in,那么内外表都进行全表扫描,没有用到索引,not exists的子查询可以用到表上的索引,所以无论哪个表大not exists都比not in要快 varchar 和char 的区别?char表示定长字符串,长度固定,varchar长度可变 char中插入的数据长度小于其固定长度时,使用空格填充 char存取速度很快,varchar则慢一些 char能存放的字符数为255,varchar最多存放字符数为65532 varchar(50)中50的含义?int(20)中20的含义最多存放50个字符,显示字符的长度为20 drop,delete,truncate的区别drop:把表连同数据全部删除,不可回滚,速度最快 truncate:表结构依然存在,删除表中所有数据 delete:删除数据行,可以回滚,速度最慢 where字句的优化?对查询进行优化,应该避免全表扫描,首先考虑在where和order by涉及的列上建立索引 避免where字句中的null值判断,引擎会放弃使用索引进行全表扫描 避免在where字句中使用或<>操作符,会进行全表扫描 避免在where字句中使用or来连接条件,会进行全表扫描 在连续少量数据的时候,能不用in与not in就不用比如in (1,2,3)这样的条件 类似于like "%吴%"这样的条件也会导致全表扫描 where语句中使用参数会导致全表扫描 where语句的=号左边使用函数,算数符号操作会导致无法正确使用索引 大表优化?垂直分区和水平分区?
垂直分区:根据数据库里数据表的相关性进行拆分,它的作用是使得行数据变小,在查询的时候减少IO次数,简化表的结构,易于维护 ?水平分区:保持表结构不变,通过某种策略存储数据分片,仅解决了单一表数据过大的问题,对于mysql的并发能力没有什么意义,当进行水平拆分的时候最好的做法是分库 |
|
|
上一篇文章 下一篇文章 查看所有文章 |
|
开发:
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/23 22:52:44- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |