首页 > 数据库 >MySQL 索引

MySQL 索引

时间:2024-10-13 21:50:23浏览次数:6  
标签:存储 索引 InnoDB 哈希 MySQL 数据 主键

  • 索引是让提高数据查询效率的数据结构。(避免全表扫描)
  • 索引的实现方式:哈希索引、B+Tree 树、倒排索引。
  • InnoDB B+Tree 的叶子节点指向主键id或存储数据行;MyISAM 的叶子节点指向数据行的内存地址
  • MySQL 索引的最左前缀原则

索引常见模型

索引常见模型:有序数组、跳表、哈希表、搜索树

有序数组(二分法):

  • 数据顺序存储,支持区间查询
  • 插入数据需要移到数据,扩容需要复制数据,成本大
  • 适合静态数据

哈希索引:

  • 哈希冲突:拉链法、探测法
  • 存储数据没有顺序,不支持区间查询
  • 适合等值查询

B+树:

  • 数据存储存储、叶子节点通过指针相连,支持区间查询
  • B+树的树高较低,只在叶子节点存储数据进一步降低树高,可以减少磁盘访问次数

InnoDB 索引模型

在 InnoDB 中,表是根据主键顺序以B+树索引形式存放的,这种存储方式的表被称为索引组织表(聚簇索引)

根据叶子节点存储内容的不同,InnoDB 的索引分为主键索引和非主键索引(二级索引)。

二级索引涉及回表(MySQL5.6索引下推)和覆盖索引。

索引维护

为了维护索引的有序性,数据插入时需要做必要的维护;

顺序插入数据可以避免页分裂(数据页利用率)和数据移动的开销,所以需要尽量保证主键是自增的/有序的(auto_increment

在选择主键时,第二需要考虑的是主键类型要尽量小,这样可以减少二级索引的空间。

如果数据不是顺序插入的,在插入后可以通过重建表优化空间

  • alter table t1 engine=innodb
  • optimize table t1

标签:存储,索引,InnoDB,哈希,MySQL,数据,主键
From: https://www.cnblogs.com/liaozibo/p/18463069

相关文章

  • Mysql锁的学习
    Mysql的锁主要为全局锁、表锁和行锁。全局锁是针对整个数据库的锁,最常用的是读锁和写锁读锁(共享锁):允许读取数据,不允许修改数据,可以保持数据一致性写锁(排他锁):在你修改数据时,阻止其他用户读取和更改数据使用场景:全库备份,全库导出使用FLUSHTABLESWITHREADLOCK来加锁,UNLOC......
  • 云计算(第二阶段):mysql后的shell
    第一章:变量前言什么是shellShell是一种提供用户与操作系统内核交互的工具,它接受用户输入的命令,解释后交给操作系统去执行。它不仅可以作为命令解释器,还可以通过脚本完成一系列自动化任务。shell的特点跨平台:大多数Shell都可以在不同的类UNIX系统上运行,包括Linux......
  • MySQL(压缩包)配置过程
    1.下载MySQL安装包MySQL::DownloadMySQLCommunityServer2.将下载完成的压缩包解压到某一目录,如:C:\MySQL并在系统环境中添加以上目录。 3.在上述目录下新建my.ini文件,并在文件中输入以下内容:[mysqld]port=3306basedir=C:\MySQLdatadir=C:\MySQL\datamax_connect......
  • SQL语句练习1—创建表和索引
    【一句话概括本文】本文旨在通过mysql实验的方式完成4道建表语句题和2道索引题。【本文特色】1.配图。干巴巴的文字没有说服力。一图胜千言。2.sql型配色。颜色已经蕴含了信息。3.实验验证。实践是检验整理唯一的标准,而非作者一拍脑门写出的结果。4.目录。利用目录快速到......
  • MySQL 事务隔离
    事务保证一组操作要么全部成功,要么全部失败。在MySQL中事务是在引擎层实现的。隔离性和隔离级别事务的四大特性(ACID):原子性、一致性、隔离性、持久性事务隔离级别:读未提交、读已提交、可重复读、串行化当数据库有多个事务同时执行的时候,可能会出现丢失更新、脏读、不可重复......
  • 使用MySQL之检索数据
    检索单个列比如:SELECTprod_nameFROMproducts;输出如下:此时数据没有过滤(过滤将得出结果集的一个子集),也没有排序。检索多个列比如:SELECTprod_id,prod_name,prod_priceFROMproducts;输出如下:从上述输出可以看到,SQL语句一般返回原始的、无格式的数据。数据的格式......
  • 2024-10-13:用go语言,给定一个二进制数组 nums,长度为 n, 目标是让 Alice 通过最少的行动
    2024-10-13:用go语言,给定一个二进制数组nums,长度为n,目标是让Alice通过最少的行动次数从nums中拾取k个1。Alice可以选择任何索引aliceIndex,如果对应的nums[aliceIndex]是1,Alice会拾取一个1并将其设为0。之后,Alice可以选择以下两种行动之一:将一个0变为1(最多执行maxCh......
  • MySQL中的数据类型有哪些?如何选择合适的数据类型来优化性能?
    MySQL中的数据类型丰富多样,它们主要分为以下几大类,并且每一类中又包含多种具体的数据类型:整数类型:包括TINYINT、SMALLINT、MEDIUMINT、INT、BIGINT等,这些类型用于存储整数值,其范围和存储大小各不相同。例如,TINYINT占用1个字节,而BIGINT则占用8个字节。浮点数和定点数类型:FLO......
  • DAY3 MySQL学习笔记
    DAY3MySQL学习笔记DDL-表操作-数据类型MySQL中数据类型主要分为三类:数值型、字符串型、日期时间类型数值类型分类类型大小有符号(SIGNED)范围无符号(UNSIGNED)范围描述TINTING1byte(-128,127)(0,255)小整数值SMALLINT2bytes(-32768,32767)(0,65536)大整数值MEDIUMINT3bytes......
  • Windows环境下手动安装MySQL
    下载MySQL安装包:前往MySQL官网下载适合你系统的安装包,例如mysql-installer-web-community.0.8.5.msi。手动运行安装程序:双击下载的安装包,启动安装向导。按照向导的提示完成安装过程。检查安装路径:安装完成后,检查MySQL的安装路径,例如C:\ProgramFiles\MySQL\MySQL......