数据库相关概念

一、数据库的索引分为几类,索引的使用场景

主键索引: 数据列不允许重复,不允许为NULL,一个表只能有一个主键。

唯一索引: 数据列不允许重复,允许为NULL值,一个表允许多个列创建唯一索引。
可以通过 ALTER TABLE table_name ADD UNIQUE (column); 创建唯一索引
可以通过 ALTER TABLE table_name ADD UNIQUE (column1,column2); 创建唯一组合索引

普通索引: 基本的索引类型,没有唯一性的限制,允许为NULL值。
可以通过ALTER TABLE table_name ADD INDEX index_name (column);创建普通索引
可以通过ALTER TABLE table_name ADD INDEX index_name(column1, column2, column3);创建组合索引

全文索引: 是目前搜索引擎使用的一种关键技术。
可以通过ALTER TABLE table_name ADD FULLTEXT (column);创建全文索引
索引全介绍

前提:索引的作用
索引是为了提高数据库查询数据的速度而增加的标志符号(通过创建唯一性索引,可以保证表中每一行数据的唯一性)。
索引主要建立在
①经常搜索的列;
②主键所在列;
③外键所在列
索引包括聚集索引与非聚集索引,
它们的区别在于索引记录的顺序与表记录的顺序是否一致。
聚集索引: 可以理解为索引记录的顺序与表记录的顺序一致,SQL 默认在依次递增的主键上建立聚集索引,
例如,id 为 1 的数据在第一条,id 为 2 的数据在第二条。聚集索引会按照主键的顺序来排序。(例如,用字典找字,对于认识的字可以通过拼音排序对应正文找到页码)
非聚集索引: 可以理解数据存储在一个地方,索引指向数据存储的位置,索引的顺序与表中数据记录的顺序不一定一致。
例如说,建立数据表登记学生考试成绩,字段包括姓名,学号与分数。假定该表按照成绩排序、学号信息错乱,可以考虑构建非聚集索引,第一名对应 1,第二名对应 2……,想要提取第 10 个学生的学号,查找索引 10 指向的数据即可。

数据库索引方面:
索引的数据结构
MySQL 除了 B+树索引还有没有其他索引、索引优缺点分析、B+树索引介绍
MySQL 数据库支持多种索引类型,如 BTree 索引,B+Tree 索引,哈希索引,全文索引等等,
B+Tree 是 BTree 的一个变种,设 d 为树的度数,h 为树的高度,B+Tree 和BTree 的不同主要在于:
1、B+Tree 中的非叶子结点不存储数据,只存储键值;
2、B+Tree 的叶子结点没有指针,所有键值都会出现在叶子结点上,且 key 存储的键值对应的数据的物理地址;4
B+Tree 的结构如下:
一般来说 B+Tree 比 BTree 更适合实现外存的索引结构,因为存储引擎的设计专家巧妙的利用了外存(磁盘)的存储结构,即磁盘的一个扇区是整数倍的 page(页),页是存储中的一个单位,通常默认为 4K,因此索引结构的节点被设计为一个页的大小,然后利用外存的“预读取”原则,每次读取的时候,把整个节点的数据读取到内存中,然后在内存中查找,已知内存的读取速度是外存读取 I/O 速度的几百倍,那么提升查找速度的关键就在于尽可能少的磁盘 I/O,那么可以知道,每个节点中的 key 个数越多,那么树的高度越小,需要 I/O 的
次数越少,因此一般来说 B+Tree 比 BTree 更快,因为 B+Tree 的非叶节点中不存储 data,就可以存储更多的 key。

表的查询非常频繁,那么如何加索引?
组合索引??

写一个sql表(学生表(字段:姓名,分数,科目)查询每个学生分数最低的科目
select 科目,min(分数) from 学生表 group by 姓名
近一步,男女总成绩在前五的同学
select 姓名,sum(分数)from 学生表 group by 姓名
↑按姓名查找每个人的总分
select * from 学生总分表 order by sum(分数) desc 降序 limit 5

索引,索引的优缺点及其实现

索引是对数据库表中的一列或者多列的值进行排序的一种数据结构,如果把数据库中的表比作一本书,索引就是这本书的目录,通过目录可以快速查找到书中指定内容的位置。
优点:
a)可以保证数据库表中每一行的数据的唯一性。
b)可以大大加快数据的索引速度。
c)加速表与表之间的连接,特别是在实现数据的参考完事性方面特别有意义。
d)在使用分组和排序子句进行数据检索时,同样可以显著减少查询中分组和排序的时间。
f)通过使用索引,可以在时间查询的过程中,使用优化隐藏器,提高系统的性能。
缺点:
a) 创建索引和维护索引要耗费时间,这种时间随着数据量的增加而增加。
b) 索引需要占物理空间,除了数据表占用数据空间之外,每一个索引还要占用一定的物理空间,如果需要建立聚簇索引,那么需要占用的空间会更大。
c) 以表中的数据进行增、删、改的时候,索引也要动态的维护,这就降低了整数的维护速度。
d) 建立索引的原则。
e) 在经常需要搜索的列上,可以加快搜索的速度。
f) 在作为主键的列上,强制该列的唯一性和组织表中数据的排列结构。
g) 在经常用在连接的列上,这些列主要是一外键,可以加快连接的速度。
h) 在经经常需要根据范围进行搜索的列上创建索引,国为索引已经排序,其指定的范围是连续的。
i) 在经常需要排序的列上,国为索引已经排序,这样井底可以利用索引的排序,加快排序井底时间。
j) 在经常使用在where子句中的列上,加快条件的判断速度。
————————————————

原文链接:https://blog.csdn.net/qq_43452252/article/details/107234956

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值