• 1.数据库概念


    数据库概述

    数据库(DATA BASE)指长期保存在计算机的存储设备上,按照一定规则组织起来,可以被各种用户或应用共享的数据集合。

    数据库管理系统(DataBase Management System,DBMS):指一种操作和管理数据库的大型软件,用于建立、使用和维护数据库,对数据库进行统一管理和控制,以保证数据库的安全性和完整性。用户通过数据库管理系统访问数据库中的数据

    数据库分类
    关系型数据库SQL:

    关系型数据库是一个结构化的数据库,创建在关系模型(二维表格模型)基础上,一般面向于记录,存储数据是以表结构进行存储的

    SQL 语句(标准数据查询语言)就是一种基于关系型数据库的语言,用于执行对关系型数据库中数据的检索和操作

    主流的关系型数据库包括 Oracle、MySQL、SQL Server、Microsoft Access、DB2

    非关系型数据库NOSQL:

    NoSQL(NoSQL = Not Only SQL ),意思是“不仅仅是 SQL”,是非关系型数据库的总称

    除了主流的关系型数据库外的数据库,都认为是非关系型,存储数据是以键值对进行存储

    主流的 NoSQL 数据库有 Redis、MongBD、Hbase、CouhDB

    差异:

    1、数据存储方式不同
    关系型和非关系型数据库的主要差异是数据存储的方式。关系型数据天然就是表格式的,因此存储在数据表的行和列中。数据表可以彼此关联协作存储,也很容易提取数据。

    与其相反,非关系型数据不适合存储在数据表的行和列中,而是大块组合在一起。非关系型数据通常存储在数据集中,就像文档、键值对或者图结构。你的数据及其特性是选择数据存储和提取方式的首要影响因素。

    2、扩展方式不同
    SQL和NoSQL数据库最大的差别可能是在扩展方式上,要支持日益增长的需求当然要扩展。

    为了支持更多并发量,SQL数据库是纵向扩展,也就是说提高处理能力,使用速度更快速的计算机,这样处理相同的数据集就更快了。因为数据存储在关系表中,操作的性能瓶颈可能涉及很多个表,这都需要通过提高计算机性能来客服。虽然SQL数据库有很大扩展空间,但最终肯定会达到纵向扩展的上限。
    而NoSQL数据库是横向扩展的。因为非关系型数据存储天然就是分布式的,NoSQL数据库的扩展可以通过给资源池添加更多普通的数据库服务器(节点)来分担负载。

    3、对事务性的支持不同
    如果数据操作需要高事务性或者复杂数据查询需要控制执行计划,那么传统的SQL数据库从性能和稳定性方面考虑是你的最佳选择。SQL数据库支持对事务原子性细粒度控制,并且易于回滚事务。

    虽然NoSQL数据库也可以使用事务操作,但稳定性方面没法和关系型数据库比较,所以它们真正闪亮的价值是在操作的扩展性和大数据量处理方面

    相关概念
    • Data:数据,是数据库中存储的基本对象,是描述事物的符号记录。
    • Database:数据库,是长期储存在计算机内、有组织的、可共享的大量数据的集合。
    • DBMS:数据库管理系统,是位于用户与操作系统之间的一层数据管理软件,用于科学地组织、存储和管理数据、高效地获取和维护数据。
    • DBS:数据库系统,指在计算机系统中引入数据库后的系统,一般由数据库、数据库管理系统、应用系统、数据库管理员(DBA)构成。
    数据库索引
    数据库索引:
    索引的作用相当于图书的目录,可以根据目录中的页码快速找到所需的内容,使对应于表的SQL语句执行得更快,可快速访问数据库表中的特定信息
    主要作用:
    提高查询效率
    分类:
    索引原理上分为三种:
    btree(树)索引---hash索引---全文索引 
    使用场景:
    当数据表较大时使用索引,可以增加效率,索引的个数不是越多越好
    btree索引类型:
    唯一索引---主键索引---聚集索引---单列索引---组合索引
    
    索引的优点:
    1.通过建立索引可以极大地提高在数据库中获取所需信息的速度,同时还能提高服务器处理相关搜索请求的效率
    2.设计数据库时,通过创建一个惟一的索引,能够在索引和信息之间形成一对一的映射式的对应关系,增加数据的惟一性特点。
    3.能提高数据的搜索及检索速度,符合数据库建立的初衷。
    4.能够加快表与表之间的连接速度,这对于提高数据的参考完整性方面具有重要作用。
    5.在信息检索过程中,若使用分组及排序子句进行时,通过建立索引能有效的减少检索过程中所需的分组及排序时间,提高检索效率。
    
    bree索引
    (1)所有关键字都出现在叶子结点的链表中(稠密索引),且链表中的关键字恰好是有序的
    (2)非叶子结点存储的是叶子结点的索引(稀疏索引),叶子结点存储的是关键字和数据
    (3)非叶子结点不能存数据
    (4)顺序存储,每一个叶子节点到根结点的距离是相同的
    (5)根节点横向也有链指针
    可以用Btree索引进行全关键字、关键字范围和关键字前缀查询。如果使用索引,必须保证按索引最左边前缀进行查询。由于Btree中节点是顺序存储的,可以对查询结果进行order by。
    限制:
    (1)查询必须从索引的最左边的列开始
    (2)不能跳过某一索引列。
    (3)存储引擎不能使用索引中范围条件右边的列。
    例如,如果你的查询语句为WHERE last_name=”Smith” AND first_name LIKE ‘J%’ AND dob=’1976-12-23’,则该查询只会使用索引中的前两列,因为LIKE是范围查询。
    
    hash索引
    简单地说,哈希索引就是采用一定的哈希算法,把键值换算成新的哈希值,检索时不需要类似B+树那样从根节点到叶子节点逐级查找,只需一次哈希算法即可立刻定位到相应的位置,速度非常快。
    从上面的图来看,Btree索引和Hash索引的明显区别是:
    (1)如果是等值查询,那么哈希索引明显有绝对优势,因为只需要经过一次算法即可找到相应的键值;当然了,这个前提是,键值都是唯一的。如果键值不是唯一的,就需要先找到该键所在位置,然后再根据链表往后扫描,直到找到相应的数据;
    (2)从示意图中也能看到,如果是范围查询检索,这时候哈希索引就毫无用武之地了,因为原先是有序的键值,经过哈希算法后,有可能变成不连续的了,就没办法再利用索引完成范围查询检索;
    同理,哈希索引也没办法利用索引完成排序,以及like ‘xxx%’ 这样的部分模糊查询(这种部分模糊查询,其实本质上也是范围查询);
    (3)哈希索引也不支持多列联合索引的最左匹配规则;
    (4)Btree的关键字检索效率比较平均,不像Hash那样波动幅度大,在有大量重复键值情况下,哈希索引的效率也是极低的,因为存在所谓的哈希碰撞问题。
    
    增加索引优势:
    1,加快查询速度
    2,创建唯一索引来保证数据表中数据的唯一性
    3,实现数据的完整性,加速表和表之间的连接
    4,减少分组和排序的时间
    
    索引的分类:
    唯一索引
         主键索引:创建索引的字段如果有主键约束,那么该字段会自动变为主键索引,也可以对一个普通字段添加主键索引,要求字段值非空且唯一,主键索引是特殊的唯一索引
         唯一索引:创建索引的字段如果有主键约束,那么该字段会自动变为唯一索引,也可以对一个普通字段添加唯一索引,要求字段值唯一
    单列索引:对指定的字段添加索引,对索引字段的值没有要求
    组合索引:对多个字段组合在一起创建一个索引
    
    全文索引:指定对myisam存储引擎表创建全文索引,并且要求全文索引字段的数据类型为字符串类型(char,varchar),可以对索引字段的值进行全文查找,一般用于文章类型的数据的搜索
    
    创建索引的规则
    (1)创建索引并非 ' 是越多越好
    (2)数据量小得表最好不要创建索引
    (3)避免对经常更新的数据创建索引
    (4)在条件表达式中经常用到的不同值较多的列创建索引
    (5)当唯一性是某种数据本身的特征时,我们创建唯一性索引
    (6)在频繁进行排序或分组的列上建立索引,如果排序的列有多个,可以创建全文索引
    
    #查看数据表创建的索引信息
    show  index    from   表名\G
    主键索引  创建主键  就相当于创建了一个索引
    主键属于索引中一种 在数据库关系表中为表定义主键将自动创建主键索引,主键所以是唯一索引的类型  该索引要求主键中的每个值都是唯一的  当在查询中使用主键索引,可以加快数据的访问
    主键索引的创建
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49
    • 50
    • 51
    • 52
    • 53
    • 54
    • 55
    • 56
    • 57
    • 58
    • 59
    • 60
    • 61
    • 62
    • 63
    • 64
    • 65
    • 66
    • 67
    • 68
    • 69
    • 70
  • 相关阅读:
    IRIS的镜像配置(2)
    Linux系统内核概述
    简简单单入门Makefile
    Pytest自动化测试框架介绍
    shell编程中的正则表达式和文本处理工具
    28李沐动手学深度学习v2/卷积神经网络,LeNet
    Redis高频40问
    MyBatis 中如何实现分页 ?
    Delphi记录
    557、Vue 3 学习笔记 -【常用Composition API(六)】 2023.09.05
  • 原文地址:https://blog.csdn.net/weixin_45221811/article/details/126944027