首页 > 数据库 >MYSQL优化之索引(index)

MYSQL优化之索引(index)

时间:2023-12-22 11:22:27浏览次数:30  
标签:index -- 创建 索引 user MYSQL tb

MYSQL优化之索引(index)-语法认知篇

一、索引概述

1.什么是索引

索引是一种单独的、存储在磁盘上的数据库结构,包含对数据表中所有记录的引用指针。它的作用就相当于书籍的目录,可以加快对数据的查询速度

2.索引的优点

  • 可以大大加快数据的检索速度

  • 可以保证数据库表中每行数据的唯一性(唯一索引)。

  • 加速表和表之间的连接。

  • 可以显著减少查询中分组和排序的时间。

3.索引的分类

  • 普通索引:普通索引(INDEX)是MySQL中最基本的索引,它的唯一任务是加快对数据的访问速度。
  • 组合索引:组合索引是相对单列索引而言,单列索引是指索引中只包含单个列,一个表可以有多个单列索引;组合索引是指在表的多个字段组合上创建的索引。
  • 唯一索引:设置唯一索引(UNIQUE)的列的值必须唯一,但允许有空值。如果索引包含多个字段,则列值的组合必须唯一。创建唯一索引的主要目的不是提高查询速度,而是避免数据重复
  • 全文索引:全文索引(FULLTEXT)可以在CHAR,VARCHAR和TEXT类型的列上创建。在创建索引的列上支持值的全文查找,并且允许列值重复和为NULL。
  • 空间索引:空间索引(SPATIAL)是对空间数据类型的字段创建的索引,MySQL中的空间数据类型主要有GEOMETRY、POINT、LINESTRING和POLYGON。创建空间索引的字段,必须将其声明为NOT NULL。

4.创建索引的原则

  • 数据量很小的表最好不要使用索引
  • 对于经常执行修改操作的表不要创建过多索引,并且索引中的列应尽可能少。而对于经常执行查询操作的字段,应该创建索引。
  • 索引并非越多越好。过多的索引会占用大量磁盘空间,并且会影响插入、修改和删除等语句的性能。
  • 在条件表达式中经常会用到的不同值较多的列上创建索引,不同值较少的列不要创建索引。因为这样不仅不会提高查询效率,反而会严重降低更新速度。
  • 在频繁进行排序或分组(即进行group by或order by操作)的列上创建索引。如果待排序的列有多个,可以在这些列上创建组合索引。

二、创建和查看索引

1.在创建表的同时创建索引

1.1.语法
CREATE TABLE 表名(
[字段 数据类型 约束条件 comment '字段描述',]
……
INDEX|KEY 索引名称 (索引字段 1 [(length)]) [ASC|DESC],
		         ……
	       	        (索引字段 n [(length)]) [ASC|DESC])
);

1.2.示例

创建数据表tb_user,并在创建表的时候创建索引(加快对数据的访问速度)数据表要求如下:

字段 数据类型(长度) 约束条件 字段描述
user_id int 主键、自增长 编号
user_name varchar(40) 非空 用户名
user_cardNo varchar(18) 非空 身份证号
user_gender int 性别
user_birthday date 出生年月
user_phone varchar(11) 非空 联系电话
-- 创建用户表,在创建表的时候 创建索引
drop table if  exists tb_user;
create table tb_user(
	user_id int not null primary key auto_increment comment '编号',
    user_name varchar(40) not null comment '用户名',
    user_cardNo varchar(18) not null comment '身份证号',
    user_gender int comment '性别',
    user_birthday date comment '出生日期',
    user_phone varchar(11) not null comment '联系电话',
    -- 在创建表的时候创建索引 index 索引名(字段名)
    index i_index(user_name),
    -- 创建组合索引 index 索引名(字段1,字段2,字段n)
    index z_index(user_name,user_gender,user_birthday)
);

2.使用ALTER TABLE语句在已有的表上创建。

-- 语法:
ALTER TABLE 表名 ADD [ UNIQUE | FULLTEXT | SPATIAL]  [INDEX | KEY] [索引名] (索引字段[(length)]) [ASC|DESC]
-- 示例:给tb_user 表的 user_CardNo 身份证号添加唯一索引
alter table tb_user add unique(user_cardNo);

3.使用CREATE INDEX语句在已有的表上创建。

-- 语法:
CREATE [UNIQUE | FULLTEXT | SPATIAL] INDEX 索引名 ON 表名 (col_name[(length)]) [ASC | DESC]
-- 示例:给tb_user 表的 user_phone 电话号码字段添加全文索引
create fulltext index  index_full_phone on  tb_user (user_phone);

4.查看索引

-- 语法: show index from  表名
-- 示例:查看tb_user 表的索引
show index from tb_user;

三、删除索引

1.使用ALTER TABLE语句删除索引

-- 语法:ALTER TABLE 表名 DROP INDEX 索引名;
-- 示例:删除user_phone上的全文索引
alter table  tb_user  drop  index  index_full_phone;

2.删除主键索引

ALTER TABLE 表名 drop PRIMARY KEY;

3.使用DROP INDEX语句删除索引

-- 语法:DROP INDEX 索引名 ON 表名;
-- 示例:删除user_CardNo上的唯一索引
DROP INDEX user_cardNo ON tb_user;

标签:index,--,创建,索引,user,MYSQL,tb
From: https://www.cnblogs.com/coderkdf/p/17920883.html

相关文章

  • MySQL运维14-管理及监控工具Mycat-web的安装配置
    一、Mycat-web介绍Mycat-web(现改名为Mycat-eye)是对Mycat-server提供监控服务,通过JDBC连接对Mycat,MySQL监控,监控远程服务器的cpu,内存,网络,磁盘等情况的使用。Mycat-web运行过程中需要依赖zookeeper,因此需要先安装zookeeper,下载地址如下:zookeeper:链接: https://pa......
  • Mac安装Mysql5.7
    官网https://downloads.mysql.com/archives/community/下载Mysql5.7.31,再高5.7版本没有macOS选项安装安装完毕会弹出帐号密码这里要把密码记住,待会用mysqladmin重置密码时要用。启动mysql服务系统设置拉到最下面,启动mysql服务启动成功设置mysql服务端mysql命令别名......
  • MySQL8.0 OCP 70题
    Choosetwo.WhichtwoMySQLServeraccountsarelockedbydefault?默认情况哪两个MySQLServer帐户被锁定?A)anynewROLEaccounts任何新的角色帐户B)anyinternalsystemaccounts任何内部系统帐户C)anyusercreatedwithausername,butmissingthehostnameD......
  • Excel-最强函数搭档INDEX&MATCH(指数+寻找)
    1、VLOOKUP函数的缺点有一个很大的缺点就是如果要搜寻的栏位不是在表格的最左侧,或是表格采用了横向排列的话,无用武之地。如果是横向表格,而要查询的资料行也恰巧是第一行的话,可以使用HLOOKUP函数,Hlookup与vlookup类似,只是查询方向不同=HOOKUP(被查询值,查询的范围,要传回的行数)困境......
  • 如何判断一个sql走不走索引?
    在你的工作中,可能写过很多个sql,我相信最让你头疼的,一定还是那风骚的查询sql。我猜你很可能有这样的体验,好不容易写了一个牛逼哄哄的查询sql,兴奋的上线投产。结果,在第二天阳光明媚的日子里,dba把你的sql揪了出来,揪出来还不算,dba还要发到群里@你,说:“嗨,兄弟,瞅瞅你写的个啥?”接着,dba......
  • 在 MySQL 中,你可以使用 `AVG()` 函数来计算一组值或表达式的平均值。`AVG()` 函数的基
    在MySQL中,AVG()函数在计算平均值时会自动忽略NULL值¹⁴。也就是说,它只会计算所有非空值的平均值³。例如,假设你有一个包含以下值的列:90,80,70,85,95,NULL,NULL。在这种情况下,AVG()函数将只计算非空值的平均值,即:而不是将NULL值视为0并计算所有值的平均值。如果你需......
  • mysql
    MYSQL1.安装2.用法sql语句可单行或多行,以分号结尾;MySQL数据库的SQL语句不区分大小写,关键字建议使用大写。单行注释:--注释内容或#注释内容(MySQL特有)多行注释:/*注释*/3.mysql数据类型​ 数值:tinyint:1个字节(小整数类型)int:4个字节(大整数类型)double......
  • docker初步入门学习安装redis和mysql
    dockerrun--namemyredis-p6379:6379-dredisredis-server--appendonlyyesdockerrun--namemysql-eMYSQL_ROOT_PASSWORD=123456-d-p3306:3306mysql:5.7.27dockerpullmysql:5.7.27dockerrun-d--hostnamemy-rabbit--namemyra......
  • MySQL 8 半同步复制
    安装半同步复制半同步复制是通过插件的形式实现的。必须要在源库和副本上安装插件。源库和副本有不同的插件。插件安装后,可通过与之相关的系统变量对其进行控制。只有安装了相关插件,这些系统变量才可用。要使用半同步复制,必须满足以下要求:·要求MySQL服务器支持动态加载。要......
  • Mysql报错:too many connections原因及解决方法
    原因是mysql连接数过多解决方案一:1、linux登录mysql:mysql-uroot-p;2、查看mysql允许的最大连接数showvariableslike'%max_connections%';3、查看这次mysql服务启动到现在,同一时刻最多mysql有多少连接showstatuslike'Max_used_connections';4、修改mysql最大连......