iis服务器助手广告广告
返回顶部
首页 > 资讯 > 数据库 >学习笔记 12 数据库索引和锁
  • 695
分享到

学习笔记 12 数据库索引和锁

2024-04-02 19:04:59 695人浏览 安东尼
摘要

索引是为了提高查询的效率。常见的索引模型有hash索引,有序数组,二叉树索引。hash索引:hash表是一种以键值对存储的数据结构,适用于等值查询场景;由于数据不是有序存储的,所以范围查询时效率比较差。有序

索引是为了提高查询的效率。
常见的索引模型有hash索引,有序数组二叉树索引。
hash索引:hash表是一种以键值对存储的数据结构,适用于等值查询场景;由于数据不是有序存储的,所以范围查询时效率比较差。
有序数组:适用于静态存储引擎,数据不会发生改变的场景,等值查询和范围查询的效率都很好。
N叉数索引:为了让查询尽量少地读磁盘,不适用二叉树,使用N叉树。

INNODB使用B+索引树模型,表按照主键的顺序以索引的形式存放,即索引组织表。索引分为主键索引和非主键索引(二级索引)。
非主键索引查询数据需要回表,覆盖索引由于要查询的值已经存在于索引中,因此不需要回表,减少树的搜索次数,提升性能。
B+树索引结构,可以使用最左前缀原则来定位数据。
建立联合索引时,注意安排字段的顺序,尽量使得需要维护的索引的数目最少。
Mysql 5.6引入索引下推优化,在索引遍历的过程中,对索引包含的字段先做判断,过滤不满足条件的记录,减少回表次数。

mysql的类型:
全局锁,表锁,行锁。
全局锁对数据库整个实例加锁,flush table with read lock,在逻辑备份时使用。
表级锁:表锁和元数据锁
表锁,lock tables *** read/write
元数据锁
学习笔记 12 数据库索引和锁

Mysql在线对表DDL操作时,如果有未提交的事务,也会造成数据库堵塞。
在线添加索引:
alter table test add index index_id(column1) algrithm=inplace;
如下online ddl总结来源于博客:
https://www.cnblogs.com/beef/p/7376035.html
Https://dev.mysql.com/doc/refman/5.6/en/innodb-online-ddl.html
online ddl主要包括3个阶段,prepare阶段,ddl执行阶段,commit阶段,rebuild方式比no-rebuild方式实质多了一个ddl执行阶段,prepare阶段和commit阶段类似。下面将主要介绍ddl执行过程中三个阶段的流程。

3.1、Prepare阶段:

①:创建新的临时frm文件(与InnoDB无关) ②:持有EXCLUSIVE-MDL锁,禁止读写 ③:根据alter类型,确定执行方式(copy,online-rebuild,online-norebuild)

假如是Add Index,则选择online-norebuild即INPLACE方式             

④:更新数据字典的内存对象

⑤:分配row_log对象记录增量(仅rebuild类型需要) ⑥:生成新的临时ibd文件(仅rebuild类型需要)

3.2、ddl执行阶段:

①:降级EXCLUSIVE-MDL锁,允许读写

②:扫描old_table的聚集索引每一条记录rec ③:遍历新表的聚集索引和二级索引,逐一处理

④:根据rec构造对应的索引项

⑤:将构造索引项插入sort_buffer块排序 ⑥:将sort_buffer块更新到新的索引上 ⑦:记录ddl执行过程中产生的增量(仅rebuild类型需要) ⑧:重放row_log中的操作到新索引上(no-rebuild数据是在原表上更新的) ⑨:重放row_log间产生dml操作append到row_log最后一个Block

3.3、commit阶段:

①:当前Block为row_log最后一个时,禁止读写,升级到EXCLUSIVE-MDL锁 ②:重做row_log中最后一部分增量 ③:更新innodb的数据字典表 ④:提交事务(刷事务的redo日志) ⑤:修改统计信息 ⑥:rename临时idb文件,frm文件 ⑦:变更完成

您可能感兴趣的文档:

--结束END--

本文标题: 学习笔记 12 数据库索引和锁

本文链接: https://www.lsjlt.com/news/44801.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • PHP学习笔记:数据库优化与索引设计
    在开发Web应用程序时,数据库操作是一个非常关键的环节。数据库的性能直接影响着Web应用程序的响应速度和用户体验。为了提升数据库的效率和查询速度,我们需要进行数据库优化和索引设计。一、数据库优化数据库架构优化:正规化设计:遵循数据库范式,减...
    99+
    2023-10-21
    PHP 数据库优化 索引设计
  • ASP 大数据索引是什么?学习笔记分享!
    随着互联网和大数据时代的到来,数据量的增加以及数据分析的需求不断升高,索引在数据库中扮演着极为重要的角色。ASP 大数据索引作为一种高效的索引技术,受到了越来越多的关注。本文将详细介绍 ASP 大数据索引的概念、使用方法以及优缺点。 一、...
    99+
    2023-10-22
    大数据 索引 学习笔记
  • python学习笔记(三)—数据库篇
    一、数据库编程 数据库编程是指在应用程序中使用数据库管理系统(DBMS)进行数据存储、检索和处理的过程。数据库提供了一种结构化的方式来组织和存储数据,使得数据的管理更加高效和可靠。 1.1 关系数据库...
    99+
    2023-09-18
    python 学习 笔记
  • ASP 大数据索引学习笔记,带你掌握全面的索引知识!
    随着大数据时代的到来,数据量不断增加,如何高效地查询数据成为了一项重要的技能。索引作为一种常用的数据结构,可以帮助我们在海量数据中快速定位所需信息。本篇文章将带你深入学习 ASP 大数据索引,掌握全面的索引知识。 一、什么是索引? 索引是...
    99+
    2023-10-22
    大数据 索引 学习笔记
  • 如何学习 ASP 大数据索引?这份笔记有帮助!
    随着数据量的不断增加,如何高效地管理和查询数据成为了一个重要的问题。ASP 大数据索引是一种高效的索引方式,它可以显著提升大数据查询的速度。本文将介绍 ASP 大数据索引的基本概念、使用方法和优化技巧,并通过演示代码帮助读者更好地理解和掌...
    99+
    2023-10-22
    大数据 索引 学习笔记
  • PHP学习笔记:搜索引擎与全文检索
    引言:搜索引擎和全文检索是现代Web开发中非常重要的功能。无论是电商网站、新闻门户还是博客网站,几乎所有的网站都需要提供快速准确的搜索功能,以便用户能够迅速找到所需要的信息。 在PHP中,我们可以借助一些强大的开源库来实现搜索引擎和全文检索...
    99+
    2023-10-21
    - PHP学习笔记 - 搜索引擎 - 全文检索
  • [Python学习笔记]Python数据
    嵩天老师的课感觉很好呀,啦啦啦 0. 数据分析之前奏 课程主要内容: 常用IDE: 本课程主要使用:Anaconda Anaconda:一个集合,包括conda、某版本Python、一批第三方库等   -支持近800个第三方库...
    99+
    2023-01-30
    学习笔记 数据 Python
  • python 学习笔记 3 -- 数据
    当你创建一个对象并给它赋一个变量的时候,这个变量仅仅 引用 那个对象,而不是表示这个对象本身!也就是说,变量名指向你计算机中存储那个对象的内存。这被称作名称到对象的绑定。eg. # -*- coding: utf-8 -*-  shopli...
    99+
    2023-01-31
    学习笔记 数据 python
  • python3 学习笔记之引用传递和引用
    python中所谓的pass-by-reference(引用传递)和pass-by-value(值传递)。是由于名字是不是内存符号造成的。如果变量不包括名字所关联的目标对象,那么就是值传递。因为此时传递是通过复制名字关联来实现的。类似于指...
    99+
    2023-01-31
    学习笔记
  • PHP学习笔记:数据库连接与操作
    概述:在Web开发中,数据库连接和操作是非常重要的环节。PHP作为一种广泛应用于Web开发的脚本语言,提供了丰富的数据库连接和操作功能。本文将介绍PHP中如何连接数据库以及常用的数据库操作方法,同时会提供具体的代码示例,以便读者更好地理解和...
    99+
    2023-10-21
    PHP 数据库操作 数据库连接
  • 学习 ASP 大数据索引,这些笔记能否助你一臂之力?
    ASP.NET 是一种用于构建基于 Web 的应用程序的开放源代码 Web 应用程序框架。它是 Microsoft 提供的一种用于开发 Web 应用程序的工具,可用于构建强大的 Web 应用程序和网站。在 ASP.NET 中,大数据索引是...
    99+
    2023-10-22
    大数据 索引 学习笔记
  • Python学习笔记一(Python数据
    Python数据类型主要包括数字,字符串,列表,元组和字典。字符串,列表,元组和字典都是序列,序列最主要两个特点是索引操作和切片操作,索引操作让我们从序列中抓取一个特定项目,切片操作让我们能够获取序列的一个切片,即一部分序列。1.数字 ...
    99+
    2023-01-31
    学习笔记 数据 Python
  • 你知道 ASP 大数据索引的重要性吗?学习笔记来了!
    ASP 大数据索引的重要性 ASP.NET 是一种基于 WEB 的应用程序框架,它使用了面向对象的编程模式,可以使得开发人员轻松地创建出高效、可扩展的 WEB 应用程序。在 ASP.NET 中,数据是至关重要的,因为它是应用程序的核心部分。...
    99+
    2023-10-22
    大数据 索引 学习笔记
  • 如何创建一个完整的Java和Django学习笔记索引?
    学习编程语言需要记录笔记,这样可以加深对知识的理解并且方便以后的回顾。但是,当你记录笔记的时候,你会发现你的笔记越来越多,难以管理。如果你正在学习Java和Django,你可能需要一个索引来管理你的笔记。这篇文章将介绍如何创建一个完整的J...
    99+
    2023-10-06
    django 学习笔记 索引
  • python学习笔记:第6天 小数据池和
    目录 1. id 和 == 2. 小数据池 3. 编码和解码 1. id 和 == id:id是一个内置的函数,可以查...
    99+
    2023-01-30
    学习笔记 数据 python
  • Python学习笔记(2)操作符和数据类
    2019-02-25 一: (1)常用操作符:   ① 算数操作符:=、-、*、/、%(求余)、**(幂运算)、//(地板除法:计算结果取比商小的最大整型)   注意:幂运算操作符比其左侧的一元运算符的优先级高,比其右边的一元运算符优先级...
    99+
    2023-01-30
    学习笔记 操作 数据
  • Java和Django学习笔记:如何建立一个完美的索引?
    在Web开发中,索引是非常重要的一部分,它可以提高查询效率,加快数据检索速度。本文将介绍如何在Java和Django中建立一个完美的索引。 一、Java中的索引建立 Java是一种面向对象的编程语言,它提供了许多数据结构和算法库,可以方便...
    99+
    2023-10-06
    django 学习笔记 索引
  • python学习笔记3:函数和参数
    函数 函数的参数和返回值 形参(形式参数): 在函数定义的时候用到的参数没有具体值,只是一个占位的符号,成为形参,下例中的peison 实参(实际参数): 在调用函数的时候输入的值:下例中的明月 def hello(person): ...
    99+
    2023-01-31
    函数 学习笔记 参数
  • 掌握 PHP 索引:学习笔记和编程算法的实践指南。
    PHP是一种服务器端脚本语言,它被广泛用于开发Web应用程序。索引是PHP编程中一个非常重要的概念,它可以帮助我们更快速地查找和操作数组中的元素。在本文中,我们将介绍如何掌握PHP索引,包括学习笔记和编程算法的实践指南。 一、PHP索引的基...
    99+
    2023-09-23
    索引 学习笔记 编程算法
  • PHP Shell 究竟是什么?学习笔记与索引详解!
    PHP Shell 是一款非常强大的 PHP 命令行工具,它可以帮助 PHP 开发者更快捷地进行开发和调试。在本文中,我们将深入探讨 PHP Shell 的各种功能和用法,帮助读者更好地了解和掌握这个工具。 一、PHP Shell 简介 ...
    99+
    2023-10-13
    shell 学习笔记 索引
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作