美文网首页
如何给数据库表添加索引

如何给数据库表添加索引

作者: emperorxiaomai | 来源:发表于2024-01-09 18:03 被阅读0次

主要考虑的点

  1. 数据量大小
  2. 阻塞的时间长短

Mysql构建索引

页管理、目录项记录、页分裂

PG构建索引

排序,元数据操作,物理复制

--------------------关于mysql和pg构建索引的处理过程-----------------------
MySQL和PostgreSQL(PG)作为流行的开源关系型数据库系统,它们在索引的创建和构建过程上有一些共同之处,同时也存在一些差异。

MySQL索引构建过程:

页管理:MySQL中的InnoDB存储引擎使用页作为存储空间管理的单位,每个页通常大小为16KB。数据存储在页中,并通过双向链表进行链接。在创建索引时,InnoDB会按照主键值的顺序将数据组织到索引页中,主键值较小的数据放在前面,较大的数据放在后面。

目录项记录:为了快速定位数据,InnoDB会为每个页创建一个目录项记录,其中包括该页的最小主键值和页目录号(页号)。这样,通过主键可以快速地定位到数据所在的页。

页分裂:当插入新数据时,如果当前页的主键值超过了该页的最大主键值,InnoDB会分配一个新的页来存放数据,并更新链表,这个过程称为页分裂。页分裂可能会导致数据的移动和额外的I/O操作。

PostgreSQL索引构建过程:

排序:PostgreSQL在创建B-Tree索引时,会先对待创建索引的数据进行排序,然后按照B-Tree的页面格式直接写入页面,避免了不必要的页分裂。

元数据操作:在PostgreSQL中,创建索引的过程涉及到一系列的元数据操作,包括在Catalog系统中生成新索引的元数据,以及在索引列上进行排序并生成B-Tree的page。

物理复制:PostgreSQL的标准复制使用WAL进行物理复制,而MySQL的标准复制使用binlog进行逻辑复制。PostgreSQL也支持通过发布/订阅模式进行逻辑复制。

对比分析:

页管理:MySQL使用页和双向链表进行管理,而PostgreSQL使用进程而非线程模型,这可能导致更多的系统资源消耗,但也提供了更好的隔离性。

排序:PostgreSQL在创建索引前对数据进行排序,而MySQL在插入数据时进行排序,这可能会影响两者的性能表现。

复制:MySQL的逻辑复制可能与PostgreSQL的物理复制在数据一致性和复制速度上有所不同。

ACID事务支持:两者都支持ACID事务,但PostgreSQL提供了更强大的支持,例如行级安全(RLS)。

查询优化器:PostgreSQL通常被认为拥有更优秀的查询优化器。

扩展性:PostgreSQL支持多种扩展,如PostGIS提供地理空间能力,而MySQL的扩展性主要体现在可插拔的存储引擎架构。

易用性:MySQL在某些方面更为宽容,例如在GROUP BY子句的SELECT语句中允许包含非聚合列。

生态:PostgreSQL的可扩展架构使其生态系统近年来更加繁荣。

在选择数据库时,需要考虑以上各点,并根据具体的应用场景和业务需求来决定最适合的数据库系统。

相关文章

  • XamarinSQLite教程添加索引

    XamarinSQLite教程添加索引 索引可以提升数据库表的查询速度。下面为已存在的表添加索引,操作步骤如下: ...

  • mysql数据库索引

    添加索引的命令:1、添加普通索引 2、添加唯一索引 3、删除索引 4、查询某张数据库表的索引使用 5、EXPLAI...

  • 用对了这些场景下的索引,技术总监夸我棒

    生产上为了高效地查询数据库中的数据,我们常常会给表中的字段添加索引,大家是否有考虑过如何添加索引才能使索引更高效,...

  • 数据库复习指南

    索引分析工具:explain 数据库优化。表很大之后,insert变得很慢,如何优化? 缓存; 分库分表; 索引;...

  • SQL学习笔记——索引

    索引 索引是在数据库表的字段上添加的,是为了提高查询效率存在的一种机制。 一张表的一个字段可以添加一个索引,当然,...

  • MySQL Workbench-常见使用问题

    1. 如何给数据库表和表字段添加备注 方法一: SQL语句法1.1 给表加注释:ALTER TABLE table...

  • MySQL高级使用和特性

    问题: 索引 如何分区 数据库优化? 主从 如何读写分离 如何设计表,如日增百万 sql的执行步骤 如何查看索引被...

  • MySQL自学day5.索引,外键,触发器

    索引 打开 student 设计表 在大型的数据库中 添加索引能有效缩短运行时间 外键成绩表中的学号不是成绩表的主...

  • 数据库 | MySQL | 9. 索引

    PRIMARY KEY是唯一性索引 添加表主键 删除&修改表主键 查看索引列表 添加普通索引 添加唯一性索引(设置...

  • 创建表

    在数据库如何创建表 CREATE TABLE 表名(列名 数据类型 约束)创建如下两个表: 给两个表添加关联 de...

网友评论

      本文标题:如何给数据库表添加索引

      本文链接:https://www.haomeiwen.com/subject/phfandtx.html