数据库 索引

2023-11-09

多数数据库,使用 B 树(Balance Tree)的结构来保存索引。

B 树,
最上层节点:根节点
最下层节点:叶子节点
两者之间的节点:中间节点

B 树,显著特征:从根节点,到各个叶子节点的距离都是相等的。如此,检索任何值时,都经过相同数目的节点。

[sql]  view plain  copy
  1. CREATE INDEX idx_lname_pinyin ON employee(lname_pinyin);  
  2. SHOW INDEX FROM employee\G  
  3. DROP INDEX idx_lname_pinyin ON employee;  

伴随主键的定义而创建的特别索引,被称为:丛生索引( Clustered Index
一个表,只有一个丛生索引。
普通的索引,在叶子节点中保存的是指向实际表的指针。
而,丛生索引,在叶子节点中保存的就是实际数据。
丛生索引,
不需要为保存索引,而使用专用的硬盘空间,节约资源
不需要检查索引后,再访问实际的表,提高了效率
创建丛生索引时,需要对表中数据进行排序,因此,在执行数据插入、更新、删除等操作时,比普通索引慢。


复合索引

[sql]  view plain  copy
  1. CREATE INDEX idx_pinyin ON employee( lname_pinyin, fname_pinyin);  
  2.   
  3. SHOW INDEX FROM employee\G  


唯一性索引

使用 UNIQUE 关键字,来创建不可重复的索引,称为:唯一性索引。
对特定列创建唯一性索引,相当于对该列追加了唯一性制约。
创建唯一性索引的时候,如果对象列中,已经含有重复数据,则:创建失败,报错。
创建成功后,如果,插入重复数据,则:插入失败,报错。
指定多个列,来创建唯一性索引,只要,这些列的组合数据不重复,就可以创建成功。

[sql]  view plain  copy
  1. CREATE UNIQUE INDEX idx_fname ON employee(fname);  
  2. CREATE UNIQUE INDEX idx_lname ON employee(lname);  
  3. CREATE UNIQUE INDEX idx_fullname ON employee(lname, fname);  


[sql]  view plain  copy
  1. EXPLAIN SELECT * FROM employee WHERE lname_pinyin='wang'\G  

[sql]  view plain  copy
  1. CREATE INDEX idx_lname_pinyin ON employee(lname_pinyin);  
  2. EXPLAIN SELECT * FROM employee WHERE lname_pinyin='wang'\G  

EXPLAIN 命令的说明:P100 表格


如果,创建索引后,遍历的次数与创建索引之前,变化不大。
说明,创建索引时,选择的列名不合理,需要选择合适的列重建索引。这是分析索引优劣的方法。

追加了索引后,也不能保证在每次检索时都会使用列索引。
如果, SQL 检索语句编写不当,就无法使用索引。
1、LIKE 运算符,进行模糊检索时,只能在前方一致的检索时,才能使用索引。
以下写法,索引不会被使用。
[sql]  view plain  copy
  1. SELECT * FROM employee WHERE lname_pinyin LIKE '%w%';  
  2. SELECT * FROM employee WHERE lname_pinyin LIKE '%w';  

2、使用 IS NOT NULL 、 <> 的场合,也不会使用索引。如下:
[sql]  view plain  copy
  1. SELECT * FROM employee WHERE lname_pinyin IS NOT NULL;  
  2. SELECT * FROM employee WHERE lname_pinyin <> 'wang';  

3、对列使用了运算或者函数的情况下,不会使用索引,如下:
[sql]  view plain  copy
  1. SELECT * FROM employee WHERE YEAR(birth) = '1980'-- 不使用索引  
  2. SELECT * FROM employee WHERE birth >= '1980-01-01' AND birth <= '1980-12-31'--使用了索引  

4、复合索引的第一列,没有包含在 WHERE 条件语句中,如下:
[sql]  view plain  copy
  1. CREATE INDEX idx_pinyin ON employee(lname_pinyin, fname_pinyin);  
  2. SELECT * FROM employee WHERE lname_pinyin = 'wang' AND fname_pinyin = 'xiao'--用了索引  
  3. SELECT * FROM employee WHERE lname_pinyin = 'wang'--用了索引  
  4.   
  5. SELECT * FROM employee WHERE fname_pinyin = 'xiao'-- 没有使用索引  
  6. SELECT * FROM employee WHERE lname_pinyin = 'wang' OR fname_pinyin = 'xiao'-- 没有使用索引  

实际开发过程中,需要积极使用 EXPLAIN 命令,来确认索引的使用情况,及时作相应修改。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

数据库 索引 的相关文章

  • oracle查看表空间大小

    查看表空间大小 select a tablespace name a bytes 1024 1024 Sum MB a bytes b bytes 1024 1024 used MB b bytes 1024 1024 free MB ro
  • Oracle建表报错:ORA-00955:名称已由现有对象使用

    现象描述 在Oracle数据库中已经创建了 staff表 现在因为业务需求 创建与staff表结构相同的测试表 test staff test staff表创建语句如下所示 create table test staff STAFF ID
  • Oracle数据库预警信息阈值设置以及预警信息自动邮件发送到管理员邮箱

    当数据库处于不理想状态时 默认情况下会通过EM发出预警 也可以通过邮件发送给管理员 要设置电子邮件通知 可在EM上 1任何 Database Control 页中 单击页眉和页脚区中的 Setup 设置 链接 2 在 Setup 设置 页中
  • 7.Oracle19c RAC集群安装部署

    1 Oracle 19c RAC For Linux安装部署 https edu csdn net course detail 35792 2 Oracle数据库 底层原理解析 解析oracle数据库内部实现 详细讲解了Oracle数据库内
  • oracle PL/SQL小结

    PL SQL 代码块 DECLARE optional BEGIN required EXCEPTION optional END required 若使用dbms output输出时 先要设置 set serveroutput on 显示
  • Oracle数据库还原数据基础知识

    还原数据在用户修改数据内容时创建 保存修改前的值 还原数据至少会保留到事务结束 便于rollback时使用 还原数据保证读取一致性 还原数据可用于闪回查询 查找过去某个时间点的数据 用于闪回表 将表恢复到特定时间点 还原表空间自动进行管理
  • Oracle 自动共享内存管理(ASMM)与自动内存管理(AMM)

    相关参数 MEMORY MAX TARGET 不可动态调整 代表内存 SGA PGA 的最大值 SQL gt ALTER SYSTEM SET MEMORY MAX TARGET 1000M SCOPE SPFILE MEMORY TARG
  • Oracle数据库日志写进程执行的时机

    用户执行commit操作时 日志缓冲区三分之一满时 DBWn进程写入前 每隔三秒 数据库正常关闭前
  • 【数据库】Navicat远程连接oracle出现ORA 28547错误

    问题说明 用 Navicat Premium 15 连接oracle数据库 连接本地没有问题 远程连接oracle数据库时就出现问题 问题为 ORA 28547 connection to server failed probable Or
  • oracle数据库小结

    运用sqlplus连接数据库 sqlplus as sysdba 以系统用户 sqlplus username password 以普通用户登录 若忘记用户密码 则可以先以系统用户登录 然后运用alter user 用户名 identifi
  • oracle数据库下创建用户

    一 使用sqlplus 创建用户 1 登陆到sqlplus 2 键入 create user user name identified by password user name 要用户名 password 对应的密码 3 键入 Grant
  • Oracl之动态Sql编写总结

    一 概述 在通常的sql操作中 sql语句基本上都是固定的 如 SELECT t empno t ename FROM scott emp t WHERE t deptno 20 但有的时候 从应用的需要或程序的编写出发 都可能需要用到动态
  • oracle和mysql细微区别

    2 小的方面 语法等 mysql可以实现自增长主键 通过字段的auto increment属性 Oracle则需要通过序列 Sequence 来实现 mysql可以用双引号来引用字符串 当然单引号也行 Oracle只能用单引号 mysql在
  • 只要以查询数据的前三行如何处理

    select m name m numbs from select name count name as numbs from kh hbrc info t where t tpr fl 软件技术 and t xzzhw 软件部 group
  • Oracle数据库sql语句处理业务表重复数据取其一

    背景 在日常的工作中 我们会遇见一张表中存在重复的数据 这个重复的数据是指几个字段组成一个唯一索引的 但是因为在加工数据的过程中 会去掉这个唯一索引 但是在迁移到业务表中需要这个唯一索引 或者是业务要求等条件的 如下就演示了如何取其一 如下
  • Oracle 中的外键约束

    一 前言 在Oracle数据库中 外键是用来实现參照完整性的方法之中的一个 打个比喻 外键是指定义外键的表的列的值必须在还有一个表中出现 被參照的表称之为父表 parent table 创建外键的表称之为子表 child table 子表中
  • oracle数据库存储过程基本语法

    oracle数据库存储过程 一 基本语法 数据类型 一 字符类型 字符串数据类型还可以依据存储空间分为固定长度类型 CHAR 和可变长度类型 varchar2 nvarchar2 两种 1 char类型 定长字符串 会用空格填充来达到器最大
  • Oracle数据泵、exp/imp工具导入导出数据

    一 最常用导出导入方案 exp imp命令工具 1 ssh工具连接服务器主机 exp命令导出 1 1将数据库全部数据导出 exp system password TestDB file bak dmp log exp log full y
  • oracle 中的开窗函数over()

    开窗函数与聚合函数一样 都是对行的集合组进行聚合计算 它用于为行定义一个窗口 这里的窗口是指运算将要操作的行的集合 它对一组值进行操作 不需要使用GROUP BY子句对数据进行分组 能够在同一行中同时返回基础行的列和聚合列 反正我理解这个函
  • Oracle的数据一致性机制原理

    一 前言 在单用户环境下 在操作数据库是不需要考虑其他用户会修改同一个数据 但是在多用户的情况下 多个事务可能会修改同一个数据 最终会得到错误的数据结果 Oracle数据库是通过 multiversion consistency model

随机推荐

  • 尚硅谷大数据技术之Flume

    第1章 概述 1 1 Flume定义 Flume是Cloudera提供的一个高可用的 高可靠的 分布式的海量日志采集 聚合和传输的系统 Flume基于流式架构 灵活简单 flume能保证数据的可靠性 但不能保证数据的重复性 1 2 Flum
  • Rides:基本操作与原理

    目录 redis是什么 谁在使用redis 使用redis客户端 redis数据结构 strings lists 集合set 有序集合 哈希 redis持久化 RDB AOF AOF重写 如何选择RDB和AOF 主从 用法 redis是什么
  • APP保活

    APP保活 前言 app保活 在Android中是一种流氓行为 一方面无端浪费用户手机电量 另一方面给用户一种很困惑的感觉 影响用户体验还有可能导致整个Android系统流畅性变差 所以Google官方一种不推荐该功能 也一直在阻止这方面功
  • 最细致的LayUI【前端框架】从入门到实战-快速搭建后台管理系统

    最细致的LayUI 前端框架 从入门到实战 快速搭建后台管理系统 LayUI学习思维导图 和 Bootstrap 有些相似 但该框架有个极大的好处就是定义了很多前后端交互的样式接口 如分页表格 只需在前端配置好接口 后端则按照定义好的接口规
  • 【干货】Android系统定制基础篇:第三部分(Android静默安装、Android支持usb打印机)

    1 Android静默安装 一些产品要求APP在升级时能够实现静默安装 而无需弹出安装界面让用户确认 这里提出两种实现方案 方案一 APP调用 pm 命令实现静默安装 此方案无须修改Android源码 但需要root权限 方案二 修改And
  • ESP32之 ESP-IDF + Clion 开发环境搭建(一)—— Windows版

    本文章 来自原创专栏 ESP32教学专栏 基于ESP IDF 讲解如何使用 ESP IDF 构建 ESP32 程序 发布文章并会持续为已发布文章添加新内容 每篇文章都经过了精打细磨 通过下方对话框进入专栏目录页 CSDN 请求进入目录 O
  • 基于matlab的图解粒度参数计算,基于MATLAB的图解粒度参数计算

    陶瓷材料 第26卷 第3期 2006年8月 热 带 地 理 TROPICALGEOGRAPHY Vol126 No13 Aug 2006 基于MATLAB的图解粒度参数计算 王 为 吴 正 华南师范大学地理系 广州510631 摘 要 粒度
  • Android res文件夹下资源定义及使用

    1 颜色 RGB ARGB RRGGBB AARRGGBB 颜色资源应该位于
  • Android JNI实现锅炉压力显示系统详解

    前些天发现了一个蛮有意思的人工智能学习网站 8个字形容一下 通俗易懂 风趣幽默 感觉非常有意思 忍不住分享一下给大家 点击跳转到教程 第一步创建GuoLu c文件 Created by DELL on 2023 8 13 include
  • TCP协议通讯流程——三次握手四次挥手

    TCP协议通讯流程 如图 1 服务器的初始化 服务器端 调用socket 创建文件描述符 调用bind 将当前文件描述符与IP地址跟端口号绑定在一起 如果该端口号已经被其它进程占用了 就会bind失败 调用listen 声明当前文件描述符为
  • 【vue】Echarts3D地图下钻

    需求分析 地图下钻是一个非常常见的功能需求 本篇文章会细致讲解如何在Vue3中使用Eharts gl渲染出3D地图 并且实现地图下钻和返回上级地图的完整功能 github项目demo地址 点击这里 注意此项目为vue3版本 vue2版本在仓
  • Linux如何启动网卡?

    在新安装的Linux系统 我们配置的网卡可能是没有激活的 此时ping不通外网 下载包的时候也会报错 下面我们看看如何启动网卡 1 首先获取root权限 输入su 再输入密码 密码是不显示的 注意小键盘有没有锁住 获取root权限后 输入提
  • Python Turtle 画图

    https www jb51 net article 130181 htm Turtle库是Python语言中一个很流行的绘制图像的函数库 想象一个小乌龟 在一个横轴为x 纵轴为y的坐标系原点 0 0 位置开始 它根据一组函数指令的控制 在
  • PNG编解码算法详解

    1 PNG介绍 PNG是便携式网络图型 Portable Network Graphics 的缩写 由于PNG带有透明通道 无损压缩 可提升设计元素的呈现效果 因此设计上对PNG情有独钟 广泛的运用在设计 游戏 网页 app开发里 实际使用
  • MFC 最详细入门教程

    From https blog csdn net wang18323834864 article details 78621633 Visual Studio 2019 https visualstudio microsoft com zh
  • AttributeError: module 'urllib' has no attribute 'urlopen'

    使用py3的urllib urlopen方法时报错 PS C Users jiangcheng Documents Python Scripts gt python Python 3 6 5 Anaconda Inc default Mar
  • IDEA常用插件之代码扫描SonarLint

    文章目录 SonarLint 查找隐藏的bug 下载安装插件 扫描代码 查看结果 SonarLint 查找隐藏的bug 下载安装插件 扫描代码 项目右键 gt Analyze gt Analyze with SonarLint 查看结果 扫
  • Colmap学习三:后端Initialization部分(基础矩阵F、本质矩阵E和单应矩阵H)

    算矩阵的基础知识 解析本质 基础 单应矩阵的自由度 1 寻找初始像对 1 1手动选择ID 1 2自动筛选 prior focal length存在情况下 开始筛选 匹配点数由小到大排序 第二张候选影像的匹配数目大于init min num
  • 什么是JSP

    JSP 与 PHP ASP ASP NET 类似 是一种运行在web端的语言 JSP 全称Java Server Pages 是由 Sun Microsystems 公司倡导和许多公司参与共同创建的一种使软件开发者可以响应客户端请求 而动态
  • 数据库 索引

    多数数据库 使用 B 树 Balance Tree 的结构来保存索引 B 树 最上层节点 根节点 最下层节点 叶子节点 两者之间的节点 中间节点 B 树 显著特征 从根节点 到各个叶子节点的距离都是相等的 如此 检索任何值时 都经过相同数目