当前位置: 首页 > news >正文

MySQL教程 - 索引(Index)

更新记录
转载请注明出处。
2022年9月2日 发布。
2022年9月2日 从笔记迁移到博客。

索引

说明

是一种对数据表的一列或多列进行排序的数据结构

索引是单独的、存储在磁盘上的数据库结构

索引包含对表中记录的指针

索引的作用

提高查询速度

索引的缺点

占用磁盘空间、DML操作插入和更新速度减慢,随着数据增加越明显

索引与表

每个表支持16个索引,最小长度为256字节

索引与存储引擎

MySQL中索引的内部存储类型有 B-Tree 和 HashTable

InnoDB、MyISAM引擎只支持B-Tree

Memory引擎默认为HashTable,支持两种类型

索引分类

普通索引

普通索引是MySQL中的基本索引类型,允许在定义索引的列中插入重复值和空值

唯一索引

索引列的值必须要唯一,但允许有空值

主键是一种特殊的唯一索引,不可以为空

使用UNIQUE关键字定义唯一索引

主键索引

是一种特殊的唯一索引,不允许有空值,一张表只能有一个

组合索引

在表的多个字段组合上创建的索引

只有在查询条件中使用了这些字段左边的字段时索引才会被使用

索引列的组合必须唯一

单列索引

单个列上的索引

全文索引

支持在文本中全文查找值

只可以在CAHR、VARCHAR、TEXT类型上使用

只有MyISAM支持

允许在这些索引列中插入重复值和空值

只有MyISAM支持

空间索引

MySQL在5.7之后版本支持空间索引,而且支持OpenGIS几何数据模型

只有MyISAM支持

对空间数据类型字段建立索引

空间数据类型有4中,分别是,geometry,point,linesteing和polygon.

使用spatial关键字进行扩展

必须将其声明为not null

使用索引注意

索引不是越多越好

经常查询的表可以使用索引

避免对经常更新的表进行过多的索引

数据量小的表可以不用索引

在表达式中经常用到的不同值较多的字段建立索引

在频繁排序或分组的字段上建立索引

创建常规索引

CREATE TABLE table_name
(
    [UNIQUE | FULLTEXT | SPATIAL] INDEX <索引名>
    (字段 [(索引长度)] [ASC | DESC],...)
);

或者

ALTER TABLE 表名
ADD [UNIQUE | FULLTEXT | SPATIAL ]  INDEX <索引名>
(列名.. [(索引长度)] [ASC | DESC]);

或者

CREATE [UNIQUE | FULLTEXT | SPATIAL] INDEX <索引名>
ON 表名(字段 [(索引长度)] [ASC | DESC],...);

创建唯一索引

CREATE UNIQUE INDEX user_index
ON user (id);

删除索引

ALTER TABLE 表名 DROP INDEX <索引名>;

或者

DROP INDEX <索引名> ON 表名;

删除主键索引

ALTER TABLE <表名> DROP PRIMARY KEY;

查看索引

SHOW INDEX FROM 表名;

查询结果解释:

字段名解释
table表示创建索引的表
non_unique表示索引非唯一 1代表是非唯一索引 0代表唯一索引
key_name表示索引名称
seq_in_index字段在索引的位置
column_name表示定义索引的列字段
sub_part表示索引的长度
null表示该字段是否能为空值
index_type表示索引类型

相关文章:

  • 神经网络做预测的原理,神经网络预测空气质量
  • java代码审计的点
  • alsa-lib和alsa-utils移植
  • SAP 电商云 Spartacus 服务器端渲染的单步调试详细步骤
  • 尚硅谷Vue系列教程学习笔记(12)
  • Flutter 高级教程之如何开发iOS Widget小组件展示SQLite本地数据库数据(教程含完整源码)
  • 5大指标:评估RPA项目的ROI,实现投资回报最大化
  • 神经网络模型的基本原理,神经网络模型是干嘛的
  • 猿创征文|【vue3学习】vue3中实现深拷贝
  • TiUP 镜像参考指南
  • 鹏城AI靶场助力大规模高质量中文语料数据集安全开放
  • 安装node, 配置npm全局安装位置,安装Vue.
  • 神经网络理论及应用答案,神经网络理论名词解释
  • 国产香氛品牌别样的生意经
  • Java-基于SSM的健身后台管理系统
  • [译] 理解数组在 PHP 内部的实现(给PHP开发者的PHP源码-第四部分)
  • 【跃迁之路】【735天】程序员高效学习方法论探索系列(实验阶段492-2019.2.25)...
  • AzureCon上微软宣布了哪些容器相关的重磅消息
  • bearychat的java client
  • canvas绘制圆角头像
  • github指令
  • input实现文字超出省略号功能
  • JS实现简单的MVC模式开发小游戏
  • Mysql优化
  • Object.assign方法不能实现深复制
  • php面试题 汇集2
  • 案例分享〡三拾众筹持续交付开发流程支撑创新业务
  • 初探 Vue 生命周期和钩子函数
  • 从零开始在ubuntu上搭建node开发环境
  • 基于遗传算法的优化问题求解
  • 那些被忽略的 JavaScript 数组方法细节
  • 前端技术周刊 2018-12-10:前端自动化测试
  • 前端自动化解决方案
  • 我建了一个叫Hello World的项目
  • 我与Jetbrains的这些年
  • 学习JavaScript数据结构与算法 — 树
  • 如何在 Intellij IDEA 更高效地将应用部署到容器服务 Kubernetes ...
  • ​iOS实时查看App运行日志
  • (Redis使用系列) Springboot 在redis中使用BloomFilter布隆过滤器机制 六
  • (附源码)ssm高校升本考试管理系统 毕业设计 201631
  • (黑客游戏)HackTheGame1.21 过关攻略
  • (收藏)Git和Repo扫盲——如何取得Android源代码
  • (学习日记)2024.04.04:UCOSIII第三十二节:计数信号量实验
  • (转)Android学习笔记 --- android任务栈和启动模式
  • (转)memcache、redis缓存
  • .NET 回调、接口回调、 委托
  • @cacheable 是否缓存成功_让我们来学习学习SpringCache分布式缓存,为什么用?
  • @DateTimeFormat 和 @JsonFormat 注解详解
  • @select 怎么写存储过程_你知道select语句和update语句分别是怎么执行的吗?
  • @SuppressWarnings(unchecked)代码的作用
  • @我的前任是个极品 微博分析
  • [ Linux ] Linux信号概述 信号的产生
  • []sim300 GPRS数据收发程序
  • [2019.3.20]BZOJ4573 [Zjoi2016]大森林
  • [23] 4K4D: Real-Time 4D View Synthesis at 4K Resolution