首页 > 数据库 >MySQL索引 详细讲解

MySQL索引 详细讲解

时间:2024-12-05 20:03:41浏览次数:8  
标签:index create MySQL 索引 宽度 讲解 table 字段名

一、索引定义

索引是一种独立存在的,对数据库表中一列或多列的值进行排序(目的:加快查询速度,提高查询效率)。

二、案例演示

索引是如何提高查询速度的? 示例: 语法:
-- 未建立索引
select * from test_index where name='我的年龄12999';
-- 通过show profiles,查看查询的执行时间
show PROFILES;
-- 建立一个索引
create index name_index on test_index(name);
-- 再次通过show profiles,查看查询的执行时间
-- 结论:索引是可以提高查询速度的

三、建立索引

1、索引的分类

  • 普通索引index:简单排序 加速查询
  • 唯一索引unique

            主键索引:primary key 加快查询+实现实体完整性约束(不能有重复,也不能是null值)

            唯一索引:unique加快查询 不允许有重复值 可以空值(null值)

  • 组合索引(多个字段构成索引)
  • 全文索引fulltext(功能:分词)
  • 空间索引(spatial):了解 数据库引擎

2、索引建立方式

2.1 普通索引

语法:

-- 方法1:创建索引
create index 索引名 on 表名(字段名(长度));
-- 文本型字段可以指定长度,其它的数据类型是不需要指定长度的
如果是 CHAR , VARCHAR 类型, length 可以小于字段实际长度;如果是 BLOB 和 TEXT 类型,必须 指定 length ,下同。
-- 方法2:修改表结构来建索引
alter table 表名 add index 索引名(字段名(宽度));
-- 关于宽度的描述与方法1相同
-- 方法3:建立表的同时直接指定索引
create table 表名(字段名1 类型1(宽度),
字段名2 类型2(宽度),
……,
index 索引名(字段名(宽度))
);

示例:

create index name_index on test_index(name);
drop index name_index on test_index;
alter table test_index add index xxhh(name(10));
drop index xxhh on test_index;
drop table test_index;
create table test_index(
id int not null primary key auto_increment,
name varchar(20) not null,
index xxhh(name(20))
);

2.2 唯一索引

语法:
方法1:创建唯一索引
create unique index 索引名 on 表名(字段名(宽度));
方法2:修改表结构的同时建立唯一索引
alter table 表名 add unique 索引名(字段名(宽度));
方法3:创建表的时候直接指定
create table 表名(字段名1 类型1(宽度),
字段名2 类型2(宽度),
……,
unique 索引名(字段名(宽度))
);
示例:
create unique index xx on mytable(id);
drop index xx on mytable;
alter table mytable add unique hh(id);
drop index hh on mytable;
drop table mytable;
create table mytable(
id int not null,-- 非空约束
username varchar(16) not null,
unique xxhh(id)
);

2.3 主键索引

语法:

create table 表名(字段名1 类型1(宽度),
字段名2 类型2(宽度),
……,
primary key(字段名)
);

示例:

create table mytable(
id int not null,-- 非空约束
username varchar(16) not null,
primary key(id)
);

2.4 组合索引

语法:

create table 表名(表名(字段名1 类型1(宽度),
字段名2 类型2(宽度),
……,
index 索引名(字段名1(宽度),字段名2(宽度))
);
alter table 表名 add index 索引名(字段名1(宽度),字段名2(宽度));
create index 索引名 on 表名(字段名1(宽度),字段名2(宽度));

示例:

create table mytable(
id int not null,
username varchar(16) not null,
city varchar(50) not null,
age int not null,
index city_age_username(username varchar(10),city varchar(50),age)
);

3、删除索引

语法:
drop index 索引名 on 表名;

示例:
drop index xxhh on test_index;

标签:index,create,MySQL,索引,宽度,讲解,table,字段名
From: https://blog.csdn.net/2301_78886520/article/details/144244836

相关文章

  • Gradient checkpointing 核心流程详细讲解
    文章目录0.概述1.简单反向传播1.1整体流程1.2详细说明1.3总结2.初步优化版本2.1整体流程2.2详细说明2.3总结3.Checkpointed反向传播3.1整体流程3.2详细说明3.3总结4.补充:内存分配算法参考0.概述Gradientcheckpointing的核心思想是不保存所有层......
  • mysql left join on条件与where条件 统计报表查询方法
    mysqlleftjoinon条件与where条件统计报表查询方法1.确定数据数量,通过简化的sql查找符合条件的订单号列表2.然后根据需求,添加单个的字段,在这个过程中会添加leftjoin左关联表查询需要区分两种情况2.1.可以唯一确定记录的,(SELECTt3.get_car_addrFROM`delivery_addr`t3W......
  • MySQL的eq_range_index_dive_limit参数对in查询影响
    目录参数说明场景复现参数说明MySQL5.7的官方说明文档:https://dev.mysql.com/doc/refman/5.7/en/server-system-variables.html#sysvar_eq_range_index_dive_limiteq_range_index_dive_limit变量影响优化器在等值比较的条件中,如何评估符合条件的行数。等值比较的表达式类似以......
  • 基于微信小程序的医院挂号就医系统的设计与实现(源码+SQL脚本+LW+部署讲解等)
    专注于大学生项目实战开发,讲解,毕业答疑辅导,欢迎高校老师/同行前辈交流合作✌。技术范围:SpringBoot、Vue、SSM、HLMT、小程序、Jsp、PHP、Nodejs、Python、爬虫、数据可视化、安卓app、大数据、物联网、机器学习等设计与开发。主要内容:免费功能设计、开题报告、任务书、中......
  • linux系统修改数据存储目录导致mysql服务无法启动的问题
    在Linux系统上,安装好并启动mysql后,如果需要移动数据目录(通常是需要将数据目录移动到数据盘挂载点目录下),通常是一下几个步骤:1:停止mysql服务servicemysqlstop2:复制原数据目录到目标新目录cp-rp/var/lib/mysql/data/my_new_data_folder【-rp表示携带原有文件的权限属性到新......
  • python - mysql交互
    python与mysql交互,能找到两个库pymysql和mysql-connector-python因为两个都是基于DB-API2.0标准‌,使用上差别并不大,区别就是mysql-connector-python是由Oracle官方提供,性能可能会好一些。安装依赖pipinstallmysql-connector-python事务(update)importmysql.co......
  • 【mysql】explain命令分析慢查询
    一、场景   在进行功能开发或者测试的时候,有时候会遇到查询较慢的问题  二、explain命令介绍https://dev.mysql.com/doc/refman/8.4/en/explain.html 三、使用 字段介绍id:查询的序列号select_type:查询的类型table:查询的表partitions:......
  • CMUX-CMUX协议讲解
    目录  1.CMUX协议  2.CMUX协议帧结构  3.示例1.CMUX协议CMUX(ConnectionMultiplexing),是一种串口多路复用协议,其功能主要在一个真实的物理通道上虚拟多个并行的逻辑通信通道的能力,一般应用于TE(TerminalEquipment)与MS(MobileStation)之间,TE相当于智......
  • mysql索引概念以及索引底层数据结构
    一、什么是MySQL索引索引是数据库管理系统中一种用于提高数据检索效率的数据结构。通过在表的一个或多个列上创建索引,可以显著加快数据查询的速度,但会增加插入、删除和更新操作的开销。MySQL中索引的核心作用是快速定位数据位置,减少磁盘I/O操作,从而提高查询效率。索......
  • 【innodb阅读笔记】之 索引组织表
    一、组织索引表主键规则        在Innodb存储引擎中,表都是根据主键索引的顺序组织存放的,这种存放方式的表称为索引组织表,在innodb存储引擎表中,每个表都有一个主键,如果在创建表的时候没有显示的定义主键,则innodb会按如下方式选择或创建主键:    1.首先判断表......