数据库索引
2023-04-11 23:19:22 0 举报
数据库索引
作者其他创作
大纲/内容
4
查询条件是普通索引,先根据普通索引的B+树查找到id值,在根据id的B+树去查找对应记录,这个过程叫做回表;回表效率低,尽量减少回表;id为主键索引、name为普通索引;select * from table where name = \"zhangsan\";
分治处理
联机事物处理
把磁盘数据加载到内存中
如何把整块磁盘的数据读取到内存中
antlrApache calcite
最左匹配
当查询结果只包含主键列和查询索引列,检索只需要在普通索引的B+树上就能找到主键值和查询列,则会触发索引覆盖,无需再去主键的B+树查询数据;id为主键索引、name为普通索引;select id,name from table where name = \"zhangsan\";索引覆盖效率高,尽量使用
K:查询条件的字段值V:整行记录
扰动函数???在hashmap,避免数据聚集,让高位参与运算1010 01011011 0101地位运算时哈希相同会存入同一列,让高位进行运算可以将数据尽可能的分散
0
数据仓库
7
词法分析语法分析
数据结构
分析器
优化器
满足业务系统需求,结果快速返回
K-V格式
平衡
OLTP
对历史数据的进行分析,产生决策性的影响
sql执行流程
OLAP
面试必问的数据库索引及优化技巧1、海量数据下,如何根据执行计划调优SQL?2、mysql索引体系如何应对海量数据存储?3、海量数据下,如何设计性能优良的mysql索引4、mysql的聚簇索引和非聚簇索引全解析5、mysql索引面试必问名词:回表、索引覆盖,最左匹配6、如何针对特定SQL场景,来进行索引的调优
分块读取
server
在IO次数相同的情况下,B+树能存储更多的数据;一般情况下,3-4层的B+ 树足以支撑千万级数据量的存储;在选择索引列的时候,key值占用空间越少越好;在满足业务场景下,能选择主键自增尽量选择自增;
索引覆盖
数据库
索引
真实数据索引数据
回表
磁盘
1
hive
至多有两个分支
CBO:cost成本优化RBO:rule规则优化
与存储引擎交互
5
IO:减少IO次数、减少IO数据量
BST
数据库引擎:innodb、myisam、memory
红黑树
1、一张mysql表可以有多个索引;2、一个索引对应一颗B+树;3、B+树的叶子节点存储实际的数据值,当表有多个索引的时候,实际的数据存储一份;其他索引的叶子节点存储的是primaryKey,即聚簇索引对应的字段值;4、在innodb存储引擎中,mysql在插入数据的时候,必须要和某一索引列绑定存储,如果有主键,默认选择主键,如果没有,则选择唯一键,没有唯一键,则系统会自动产生一个6字节的rowid来进行存储。聚簇索引:和数据绑定存储的索引非聚簇索引:没有和数据绑定存储的索引id、name、ageid为主键,name为普通索引聚簇索引:id 非聚簇索引:name
K:字段值V:文件名称、文件中的偏移量、读取数据长度
mysqloracledb2
二叉树
AST抽象语法树
哈希表是散列表,存储数据需要将数据尽可能的分散存储,因此数据是无序的,在进行范围查询的时候需要一个个匹配过去,范围查询效率低。需要设计优秀的hash算法,因为在进行存储的时候的会产生大量的哈希碰撞和哈希冲突。memory存储引擎使用的是哈希表innodb存储引擎中有个特性叫自适应哈希
2
哈希表、二叉树、BST、AVL、红黑树
管理连接权限校验
3
B+树
最左匹配失效:索引覆盖会导致最左匹配失效id、name、ageid为主键,name,age为组合索引select id ,name,age from table where age = 12; 会使用索引查询的时候,可以从组合索引的对应的B+树中获取到所需查询的字段,会走索引覆盖
主键自增,id用完了怎么办?主键为int类型的时候,无符号自增的数据量为42亿多,一般情况下够用;在超出,可以修改主键为bigint类型,单占用空间会更大(8字节,多一倍)也可以使用复合主键bigint unsigned一般来说一张表超过500W数据就要考虑分表了
哈希表
用于组合索引;id为主键,name、age为组合索引select * from table where nama = \"zs\" and age = 12 ; 使用索引select * from table where age = 12; 不使用索引select * from table where nama = \"zs\" ; 使用索引select * from table where age = 12 and name = \"zs\"; 使用索引
磁盘预读: 当内存和磁盘进行交互的时候,有一个基本的逻辑单位,称之为页或者datapage,默认大小为4k或者8k,和操作系统有关,在进行数据读取的时候一般读取的是页的整数倍。innodb默认每次读取的大小是16K语法:show varibales like ''innodb_page_size';
AVL
有序
内存不能一次性读取磁盘数据
6
提高数据查询效率
数据格式
client(jdbc、client、sqlyog、Navicat)
执行器
连接器
联机分析处理
0 条评论
下一页