暂无图片
暂无图片
暂无图片
暂无图片
暂无图片
索引.pdf
74
11页
0次
2023-06-01
25墨值下载
点赞再看,养成习惯,微信搜索【三太⼦敖丙】我所有⽂章都在这⾥,本⽂ GitHub
https://github.com/JavaFamily 已收录,有⼀线⼤⼚⾯试完整考点,⽂末有福利
前⾔
写数据库,我第⼀时间就想到了MySQLOracle、索引、存储过程、查询优化等等。
不知道⼤家是不是跟我想得⼀样,我最想写的是索引,为啥呢?
以下这个⾯试场景,不知道⼤家熟悉不熟悉:
⾯试官:数据库有⼏千万的数据,查询⼜很慢我们怎么办?
⾯试者:加索引。
⾯试官:那索引有哪些数据类型?索引是怎么样的⼀种结构?哪些字段⼜适合索引呢?B+的优点?聚合
索引和⾮聚合索引的区别?为什么说索引会降低插⼊、删除、修改等维护任务的速度?........
⾯试者:⾯试官怎么出我们公司⻔来着
!
是的⼤家可能都知道慢了加索引,那为啥加,在什么字段上加,以及索引的数据结构特点,优点啥的都
⽐较模糊或者甚⾄不知道。
那我们也不多BB了,直接开始这次的⾯试吧。
正⽂
我看你简历上写到了熟悉MySQL数据库以及索引的相关知识,我们就从索引开始,索引有哪
些数据结构?
HashB+
⼤家去设计索引的时候,会发现索引类型是可以选择的。
为什么哈希表、完全平衡⼆叉树、B树、B+树都可以优化查询,为何Mysql独独喜欢B+树?
我先聊⼀下Hash
⼤家可以先看⼀下下⾯的动图
注意字段值所对应的数组下标是哈希算法随机算出来的,所以可能出现哈希冲突
那么对于这样⼀个索引结构,现在来执⾏下⾯的sql语句:
select * from sanguo where name='鸡蛋'
可以直接对鸡蛋按哈希算法算出来⼀个数组下标,然后可以直接从数据中取出数据并拿到所对应那⼀
⾏数据的地址,进⽽查询那⼀⾏数据, 那么如果现在执⾏下⾯的sql语句:
select * from sanguo where name>'鸡蛋'
则⽆能为⼒,因为哈希表的特点就是可以快速的精确查询,但是不⽀持范围查询
如果做成了索引,那速度也是很慢的,要全部扫描。
问个题外话,那Hash表在哪些场景⽐较适合?
等值查询的场景,就只有KVKeyValue)的情况,例如RedisMemcached等这些NoSQL的中间
件。
你说的是⽆序的Hash表,那有没有有序的数据结构?
of 11
25墨值下载
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文档的来源(墨天轮),文档链接,文档作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论

关注
最新上传
暂无内容,敬请期待...
下载排行榜
Top250 周榜 月榜