首页 > 数据库 >MySQL 唯一索引和普通索引

MySQL 唯一索引和普通索引

时间:2024-10-15 20:24:57浏览次数:5  
标签:merge buffer 更新 唯一 索引 MySQL 数据 change

唯一索引和普通索引的区别

查询过程

基本没有区别

select id from T where k = 5

InnoDB 数据的读写单位是数据页,默认是 16KB。

更新过程

普通索引可以使用 change buffer(会持久化),唯一索引不行。

当需要更新一个数据页是,如果数据页在内存中就直接更新,
如果数据页还没在内存中,在不影响一致性的前提下,InnoDB 会将更新缓存在 change buffer 中,这样就不需要从磁盘读取数据页了。

除了访问数据页会触发 merge 外,系统后台线程会定期 merge,数据库正常关闭也会执行 merge。(merge 时同数据页更新越频繁,收益越大)

change buffer 用的是 buffer pool 的内存,可以通过参数 innodb_change_buffer_max_size 动态数组 change buffer 占用百分比。

change buffer 适用场景

  • 写多读少,change buffer 不适合数据更新后立即被访问的场景(多了 merge 的代价)
  • 数据页被更新越频繁,收益越大

索引选择实践

  • 对于一般场景,应该优先选择唯一索引,以保证数据准确性
  • 对于频繁更新/插入场景,可以选择普通索引,通过 change buffer 提升性能
  • 对于频繁更新后立即查询的场景,可以选择关闭 change buffer
  • 对于归档数据,因为已经保证数据准确性,所以可以选择普通索引

标签:merge,buffer,更新,唯一,索引,MySQL,数据,change
From: https://www.cnblogs.com/liaozibo/p/18467785

相关文章

  • MySQL 事务隔离级别实现原理
    InnoDB有两种读取数据的方式快照读/一致性读,MVCC当前读,获取读写锁后读取行的最新数据InnoDB用一致性读视图实现了MVCC,用于支持读已提交和可重复读隔离级别的实现。启动事务时立即创建视图starttransactionwithconsistentsnapshot快照读快照读/MVCCInnoDB每个事......
  • MySQL 行锁
    InnoDB和MyISAM对比Innodb支持崩溃恢复InnoDB支持事务InnoDB支持行锁B+Tree叶子节点存储内容不同MyISAM记录表行总数,InnoDB没有两阶段锁InnoDB读操作会使用MVCC,而写操作会使用写锁。InnoDB两阶段锁协议:行锁是在需要的时候加上的,并且要等到事务提交后才释放......
  • MySQL 选错索引
    查看执行计划选择的索引explainselect*fromtwhereabetween10000and10000;通过慢日志(slowlog)查看语句执行情况--启动慢日志SHOWVARIABLESLIKE'slow_query_log';--慢日志存储位置SHOWVARIABLESLIKE'slow_query_log_file';--慢日志阈值SHOWVARIABLES......
  • Elasticsearch正向索引与倒排索引
    Elasticsearch正向索引与倒排索引一、正向索引首先,要明白什么是正向索引,所谓正向索引,就是在查找某项数据时,按照id一条一条查找,如果当前数据中包含所需数据,则将当前数据取出,不包含则抛弃,直至全部遍历结束。例如:当我们按照正向索引去寻找包含小米三星苹果的数据时,会从头遍历一遍,......
  • 倒排索引和ES相关概念对比MySQL
    1.倒排索引1.1倒排索引两个重要概念:文档:用来搜索的数据,其中的每一条数据就是一个文档。例如一个网页、一个商品信息以京东商城为列词条(Term):对文档数据或用户搜索数据,利用某种算法分词,得到的具备含义的词语就是词条。例如:我是中国人,就可以分为:我、是、中国人、中国、国人这......
  • C++使用MySQL官方的C API访问MySQL数据库
    这篇文章是一个简单的C++使用MySQL官方的CAPI访问MySQL数据库的代码示例。//main.h#ifndef_H_#define_H_#include<stdio.h>#include<Windows.h>#include<mysql.h>#pragmacomment(lib,"libmysql.lib")#defineinsert_prepare"insertintotest_tbvalue......
  • jumpserver堡垒机部署 添加资产主机和MySQL数据库,图解过程
    jumpserver堡垒机部署JumpServer是广受欢迎的开源堡垒机,是符合4A规范的专业运维安全审计系统。JumpServer帮助企业以更安全的方式管控和登录所有类型的资产,实现事前授权、事中监察、事后审计,满足等保合规要求。下载软件包JumpServer-开源堡垒机-官网#官方网址......
  • Elasticsearch相关概念对比MySQL
    MySQLElasticsearch说明TableIndex索引(index),就是文档的集合,类似数据库的表(table)RowDocument文档(Document),就是一条条的数据,类似数据库中的行(Row),文档都是JSON格式ColumnField字段(Field),就是JSON文档中的字段,类似数据库中的列(Column)SchemaMappingMappi......
  • Elasticsearch相关概念对比MySQL
    Elasticsearch和MySQL是两种不同的数据管理系统,各自有其独特的概念和应用场景。以下是它们在几个关键概念上的对比:o数据模型Elasticsearch:。文档(Document):基本的数据单元,存储为JSON格式。。索引(Index):类似于数据库,包含多个文档。。类型(Type):在7.x版本后已被弃用,之前用于逻......
  • 倒排索引
    倒排索引(InvertedIndex)是一种索引方法。在信息检索系统中非常常见,尤其是在全文搜索引擎中。主要思想:将文档中出现的每个词与包含该词的文档列表关联起来,从而实现快速检索。倒排索引的基本结构1、词汇表(Dictionary):包含所有文档集合中出现过的唯一词汇,以及指向每个词对应的......