首页 > 数据库 >数据库索引

数据库索引

时间:2023-08-28 10:56:45浏览次数:49  
标签:-- 数据库 id 索引 主键 聚集 ic

一、基础

1、概念
类似目录实质: 平衡二叉树

从广义上讲,SQL Server检索所需数据的方法只有两种:

  •   使用全表扫描
  •   使用索引
B-Tree 索引  (MySQL,SQL Server,Oracle)
  • 索引每块固定大小 4K   选字段 一定要考虑字段大小(int 4b 、long 8b) 
  • 大多数B-tree 就3-4层的深度   比如 一层(分支因子) 为500个4K ,4层就 500*4k^3 =256TB
哈希Hash索引 (MySQL,Oracle)
  • 1、Hash是k,v形式,通过一个散列函数,能够根据key快速找到value  
  • 2、哈希索引就是采用一定的hash算法,把键值换成新的哈希值,检索时不需要类似B+树那样从根节点到叶子节点逐级查找,只需要一次hash算法即可立即定位到相应的位置,速度非常快。
  • 缺点: 因为底层数据结构是散列的,无法进行比较大小,不能进行范围查找

2、索引类型
唯一索引:
  • 唯一索引不允许两行具有相同的索引值
  • 当新数据将使表中的键值重复时,数据库也拒绝接受此数据
  • 不影响数据的物理存储顺序
主键索引:
  • 为表定义一个主键将自动创建主键索引,主键索引是唯一索引的特殊类型。主键索引要求主键中的每个值是唯一的,并且不能为空
聚集索引:
  • 表中各行的物理顺序与键值的逻辑(索引)顺序相同,每个表只能有一个。
  • 页码1,2,3……就是物理顺序。
非聚集索引
  • 非聚集索引指定表的逻辑顺序。数据存储在一个位置,索引存储在另一个位置,索引中包含指向数据存储位置的指针。可以有多个,小于249个
  • 按笔画排序的索引就是非聚集索引

聚集索引与非聚集索引区别

聚集索引的数据行按照索引键的顺序进行物理存储。每个表只能有一个聚集索引,通常是主键。聚集索引对于按照索引键进行范围查询和排序操作的性能较好。

非聚集索引使用单独的数据结构存储索引键和指向数据行的指针。数据行的物理存储顺序与索引无关。一个表可以有多个非聚集索引。非聚集索引可以快速定位到所需的数据行,但在涉及多个列的查询或包含非索引列的查询时可能需要额外的查找操作。


当一个表具有多个非聚集索引时,每个非聚集索引都是一个独立的数据结构,用于存储索引键和指向数据行的指针。

复合索引

复合索引的创建可以基于多个列的组合顺序。查询时,如果使用了复合索引中的前缀列,那么索引可以发挥作用。但是,如果查询条件中没有使用到复合索引的前缀列,那么索引的效果将会降低。


SQL  查索引

-- 查询表的所有索引
SELECT 
    i.name AS IndexName, -- 索引名称
    i.type_desc AS IndexType, -- 索引类型描述
    c.name AS ColumnName, -- 列名
    ic.index_column_id AS ColumnOrder -- 列的顺序
FROM 
    sys.indexes i
INNER JOIN 
    sys.index_columns ic ON i.object_id = ic.object_id AND i.index_id = ic.index_id
INNER JOIN 
    sys.columns c ON ic.object_id = c.object_id AND ic.column_id = c.column_id
WHERE 
    i.object_id = OBJECT_ID('SafeInspectionPlanRecordPointUnitItem') 
ORDER BY 
    ic.index_column_id;


SQL Server中,一个表只能创建1个聚集索引,多个非聚集索引。设置某列为主键,该列就默认为聚集索引




--Scan count 扫描计数
--logical reads 逻辑读取 
--physical reads 物理读取
--read-ahead reads 预读
--lob logical reads lob 逻辑读取
--lob physical reads lob 物理读取
--lob read-ahead reads lob 预读 
set statistics io on
SELECT * FROM dbo.Users 
set statistics io off

标签:--,数据库,id,索引,主键,聚集,ic
From: https://www.cnblogs.com/buzheng11/p/17661695.html

相关文章

  • 向量数据库(第 3 部分):并非所有索引都是一样的
    这是我关于向量数据库的系列文章的第三篇。第一部分比较了各种数据库供应商的产品以及它们在高层面上的区别,而第二部分则着重介绍了向量数据库的基础知识和功能。您可能已经阅读过DmitryKan在2021年撰写的优秀文章《并非所有向量数据库都是相同的》1,该文章涵盖了市场上各种向量数......
  • 不用循环和递归判断值在数组中的索引
    ////数组集合string[]str=newstring[]{"a","b","c","d","e","f","g"};////要查找的字符串stringNum="c";////使用Linq查询,将索引和值查出来,////新建一个匿名类,属性包括aabool类型,和Index索引......
  • torch索引使用方式示例
    已知b=torch.Tensor([[1],[2]]),请问b[1]和b[[1]]的区别在PyTorch中,b[1] 和 b[[1]] 之间有一个微妙的区别,这涉及到张量的索引和切片操作。让我解释一下两者之间的区别:b[1]:这是使用整数索引来获取张量 b 中的元素。由于 b 是一个形状为(2,1)的张量,使用整数索......
  • 数据库
    ------------恢复内容开始------------ DBA:数据库管理员 关系型数据库:行 列 非关系型数据库是实时变化的key:value如人的位置 微博热搜动态更新  1.4  官网下载后用压缩包安装以管理员方式打开cmd输入一系列命令安装mysql 下载并安装SQLyog ......
  • 业界都有哪些数据库监控工具
    本文主要介绍下数据库监控工具。业界有很多数据库监控工具,以下是一些常见的数据库监控工具及其使用的公司:Zabbix:一款开源的企业级分布式监控解决方案,支持对MySQL、Redis、MongoDB等多种数据库的监控。使用的公司包括:IBM、Nokia、Dell等。Prometheus:一款开源的监控和告警系统,支......
  • 数据库备份工具有哪些
    本文主要介绍下数据库备份工具。数据库备份工具有很多种,以下是一些常见的数据库备份工具:mysqldump:MySQL官方提供的命令行备份工具,适用于MySQL和MariaDB数据库。它可以将数据库导出为SQL文件,方便进行备份和恢复。属于逻辑备份工具。MyDumper:一款开源的MySQL备份工具,比mysqld......
  • 数据库主键生成策略
    首先明确的一点是,主键是为了区分不同的行记录,所以先抛开其他的因素,主键必须要保证:唯一性(单表或者分库分表的场景下)单表可选的方案有:自增idUUID业务字段,如:手机号、身份证号等等自增id自增主键是单表中很常用的使用方式。阿里Java开发中规定,表必备三字段:id,gmt_create,gmt......
  • ORA-01502:索引“XXX.XXX”或此类索引的分区处于不可用状态
    错误信息【汉】ORA-01502:索引“XXX.XXX”或此类索引的分区处于不可用状态【英】ORA-01502:index'string.string'orpartitionofsuchindexisinunusablestate环境信息操作系统数据库版本备注CentOS7Oracle11G错误在执行数据操作(插入数据)时报错。原因Oracle在执行DML语句......
  • mysql 深入学习三 索引优化二 (索引下推、trace工具)
    使用上一篇的表并插入测试数据#‐‐插入一些示例数据dropprocedureifexistsinsert_emp;delimiter;;createprocedureinsert_emp()begindeclareiint;seti=1;while(i<=100000)doinsertintoemployees(name,age,position)values(CONCA......
  • mysql数据库连接密码的修改
    使用MySQL创建新连接时,密码是一个非常重要的组成部分。默认情况下,MySQL会生成一个随机的密码,该密码由一串随机的字符组成,包括数字、字母和其它特殊字符。在安装MySQL时,您可以选择使用自己的密码,也可以使用默认密码。默认密码是MySQL在安装时为root用户设置的密码。在许多情况下,建......