mysql与pg的主键说明

  • mysql
    • 插入顺序与插入随机测试案例
    • B+Tree
      • 原理
      • id顺序的方式插入
      • id随机的方式插入
  • Postgresql
    • 堆组织表
    • CTID
    • Pg的元组及索引原理
    • Pg与mysql与oracel
  • 问题

mysql

插入顺序与插入随机测试案例

创建了两张表 一张表是按顺序来插入的 一张表是按随机的方式来插入的,他们都只有两个字段id与name 插入的数据量都是一样的单线程插入一百万务数据,他们的耗时差异是不大的 都是400多秒

但是这两张表占用的空间差异是非常大的

而顺序方式插入的表,则只占用了27兆的空间 ,随机方式插入的是43M

B+Tree

原理

为何差跑这么巨大,Mysql的主键是按照因为B+树来存储的正常的存储

id顺序的方式插入

当我们按照顺序的方式来插入数据,这些数据都会落入最后一个节点上**,因为他前面的所有节点都是满的(按顺序嘛)**即下图是每个节点都存储5条数据

id随机的方式插入


如果按照随机的方式插入,那么他就有可能插入到一个已经满的节点上,这时节点就会分裂,分裂成两个节点 就有可能每个节点上存储了三条数据

缺点:随机插入就会产生了很多不满的节点,即在数据量一样的情况下随机插入产生了更多不满的节点 ,空间差很大 效率也不行 本地的,远程调用

Postgresql

数据库关于索引的系统表
Pg_index记录索引的具体属性
Pg_opclass

堆组织表

  • pg默认采用的是堆组织表的方式来存储
  • 堆表(heap table)数据插入时存储位置是随机的,主要是数据库内部块的空闲情况决定,获取数据是按照命中率计算,全表扫表时不见得先插入的数据先查到。
  • 数据存储与索引存储分开, 数据存放在数据里面,索引存放在索引里
    堆的图

    堆就是无序数据的集合,索引就是将数据变得有序,在索引中键值有序,数据还是无序的
    堆表中,主键索引和普通索引一样的,叶子节点存放的是指向堆表中数据的指针(可以是一个页编号加偏移量),指向物理地址,没有回表的说法
    堆表中,主键和普通索引基本上没区别,和非空的唯一索引没区别

CTID

PG数据索引的存储顺序并不以某一列的排序顺序来存储,而是以行CTID号来存储(每一行有一个行ID号,并且这个行ID号是一个坐标)
即新增数据永远是在索引存储的最后一个叶子,即不会存在B+Tree的页分列

ctid坐标(0,1)在第0个文件page页上递增

Pg的元组及索引原理

http://www.postgres.cn/v2/news/viewone/1/539

Pg与mysql与oracel

Oracle支持堆表,也支持索引组织表
PostgreSQL只支持堆表,不支持索引组织表
Innodb只支持索引组织表

问题

postgresql得看看主键是否一定有序的?
答: 和主键没关系,所以主键无序也可以,PG索引存储的是通过系统内部的ctid实现的对标oracel的rowId

  • PG本身是使用堆表的方式进行数据存储与索引存储,即数据的存储根据内部块的空闲情部随机存储,而索引的存储根据不以某一列的排序顺序来存储,而是以行ctid号来存储(每一行有一个行ID号,并且这个行ID号是以坐标方式自增的系统内部的)
  • 下图是阿里巴巴关于这块儿的阐述
  • 我们的想法,即始PG主键可以不用有序递增,其实我们还是推荐业务尽量保持分布式全局唯一并且有序递增,这样在业务上很方便,比如在sharding时进行分页查询也能用上哦
分页的性能优化
select * from t_order order by id limit 1000000,10
select * from t_order order by id limit 0,1000010 (改写后)
建议的性能优化: select * from t_order where id>1000000 and id<1000010 order by id
或者 select * from t_order where id>1000000 limit 10

即id要是有序自增有时还能用上的啊

mysql与pg的主键索引说明相关推荐

  1. mysql建表语句主键索引_MySQL添加主键、索引

    查看索引 SHOW INDEX FROM  数据库表名 比如:SHOW INDEX FROM order_info; 添加索引 alter table 数据库add index 索引名称(数据库字段名 ...

  2. mysql中聚簇索引和主键索引

    InnoDB索引分为两种: 聚簇索引:也称聚集索引,①一般建表时的主键就会被mysql作为聚簇索引,②如果没有主键,则选择非空唯一的索引作为聚簇索引,③都没有则隐式创建一个索引作为聚簇索引 辅助索引: ...

  3. mysql主键索引_MySQL索引之主键索引

    在MySQL里,主键索引和辅助索引分别是什么意思,有什么区别? 上次的分享我们介绍了聚集索引和非聚集索引的区别,本次我们继续介绍主键索引和辅助索引的区别. 1.主键索引 主键索引,简称主键,原文是PR ...

  4. MySQL中的索引(主键索引)

    MySQL中的索引(主键索引篇) 主键索引是一种特殊的唯一索引,一个表只能有一个主键,不允许有空值.一般是在建表的时候同时添加主键索引: 一.如何添加主键索引 修改表添加主键索引 Alter tab ...

  5. 【实施工程师之家】——mysql四种索引PRIMARY(主键索引)、INDEX(一般索引)、UNIQUE(非空索引)、FULLTEXT(全文索引)应用

    mysql四种索引PRIMARY(主键索引).INDEX(一般索引).UNIQUE(非空索引).FULLTEXT(全文索引)应用 目录 1)PRIMARY: 2)NORMAL: 3)UNIQUE: 4 ...

  6. MYSQL的全表扫描,主键索引(聚集索引、第一索引),非主键索引(非聚集索引、第二索引),覆盖索引四种不同查询的分析...

    文章出处:http://inter12.iteye.com/blog/1430144 MYSQL的全表扫描,主键索引(聚集索引.第一索引),非主键索引(非聚集索引.第二索引),覆盖索引四种不同查询的分 ...

  7. mysql非主键索引_主键索引和非主键索引的区别

    1. 什么是最左前缀原则? 以下回答全部是基于MySQL的InnoDB引擎 例如对于下面这一张表 如果我们按照 name 字段来建立索引的话,采用B+树的结构,大概的索引结构如下 如果我们要进行模糊查 ...

  8. 主键索引 or 辅助索引?一文告诉你 Mysql limit 优化时的索引选择!

    作者 | 吴海存 责编 | 徐威龙 封图| CSDN下载于视觉中国 导读: 本文主要针对limit分页时,是优先基于主键索引还是辅助索引等层面展开分析,对limit及offset的用法以及是否该用索引 ...

  9. mysql索引类型和区别是什么意思_mysql主键索引和普通索引之间的区别是什么

    索引用来快速地寻找那些具有特定值的记录,所有MySQL索引都以B-树的形式保存.MySQL提供多种索引类型供选择:普通索引 .唯一性索引.主键索引 .全文索引等等.下面本篇文章就来给大家介绍一下主键索 ...

最新文章

  1. linux expect 输入密码,shell脚本无密码登录 expect的使用方法详解
  2. 【java--反射】注解(反射解析注解+注解应用)
  3. 使用PHP实现用户登录和注册的功能
  4. C# 跨线程调用控件
  5. python动态方法_python中的动态方法生成
  6. java应用程序无法启动,Apache Tomcat / 6.0.32 - Web应用程序无法启动
  7. 我在优酷 OTT 端做自动化制图
  8. Office 2007 Pro/Ent 简体中文版下载
  9. 护照扫描仪的应用环境解读 SDK数据
  10. 4种文件扩展名被阻止时发送邮件附件的方法
  11. 最难学的七大编程语言,VB 第一,Python垫底,看你学的排第几
  12. 离线高清卫星地图SDK及解决方案
  13. 问题解决:idea 中无法连接 sql server 数据库,报错 [08S01] 驱动程序无法通过使用安全套接字层(SSL)加密与 SQL Server 建立安全连接
  14. 车牌识别算法 matlab,车牌识别算法及其MATLAB实现
  15. 华为路由器ws5200虚拟服务器,华为路由器配置dhcp怎么弄?华为路由WS5200设置DHCP服务器方法...
  16. SQL Round 取整千 整百 整万
  17. 女巫煎蛋(omelette for a witch)
  18. 安全合规/GDPR--26--研究:GDPR疑难点及合规建议
  19. Caas社区作为一种服务
  20. 语义分割标记单张图片

热门文章

  1. 金盘转债上市价格预测
  2. 程序设计-在校整理-06 最常公共子序列与子串+2048小游戏+KNN简单实例
  3. golang 使用negroni,实现server
  4. 长春工业大学计算机研究生专业课,长春工业大学(专业学位)计算机技术研究生考试科目和考研参考书目...
  5. 安卓App太能乱来了!被曝一天扫你后台1.3万次:小米系统更新,一不小心扯出惊人真相...
  6. 零基础学3D建模难不难?
  7. mysql查询数据量
  8. C语言递归之苹果分盘问题
  9. 计算机少年宫辅导教师总结,学校信息技术教师的个人工作总结
  10. 湿寒阳虚体质如何艾灸