MySQL -- 索引

当表中的数据量到达几十万甚至上百万的时候,SQL查询所花费的时间会很长,导致业务超时出错,此 时就需要用索引来加速SQL查询。 由于索引也是需要存储成索引文件的,因此对索引的使用也会涉及磁盘I/O操作。如果索引创建过多, 使用不当,会造成SQL查询时,进行大量无用的磁盘I/O操作,降低了SQL的查询效率,适得其反,因此 掌握良好的索引创建原则非常重要。

1.索引分类

索引是创建在表上的,是对数据库表中一列或者多列的值进行排序的一种结果。索引的核心是提高查询的速度

物理上(聚集索引&非聚集索引)/逻辑上(...)

索引的优点: 提高查询效率

索引的缺点: 索引并非越多越好,过多的索引会导致CPU使用率居高不下,由于数据的改变,会造成索引文件的改动,过多的磁盘I/O造成CPU负荷太重

1、普通索引:没有任何限制条件,可以给任何类型的字段创建普通索引(创建新表&已创建表,数量是 不限的,一张表的一次sql查询只能用一个索引 where a=1 and b='M')

2、唯一性索引:使用UNIQUE修饰的字段,值不能够重复,主键索引就隶属于唯一性索引

3、主键索引:使用Primary Key修饰的字段会自动创建索引(MyISAM, InnoDB)

4、单列索引:在一个字段上创建索引

5、多列索引:在表的多个字段上创建索引 (uid+cid,多列索引必须使用到第一个列,才能用到多列索 引,否则索引用不上)

6、全文索引:使用FULLTEXT参数可以设置全文索引,只支持CHAR,VARCHAR和TEXT类型的字段 上,常用于数据量较大的字符串类型上,可以提高查询速度(线上项目支持专门的搜索功能,给后台服务 器增加专门的搜索引擎支持快速高校的搜索 elasticsearch 简称es C++开源的搜索引擎 搜狗的 workflow)

2.索引创建和删除

创建表的时候指定索引字段:

sql 复制代码
CREATE TABLE index1(id INT,
name VARCHAR(20),
sex ENUM('male', 'female'),
INDEX(id,name);

在已经创建的表上添加索引:

sql 复制代码
CREATE [UNIQUE] INDEX 索引名 ON 表名(属性名(length) [ASC | DESC]);

删除索引:

sql 复制代码
DROP INDEX 索引名 ON 表名;

1.经常作为where条件过滤的字段考虑添加索引

2.字符串列创建索引时,尽量规定索引的长度,而不能让索引值的长度key_len过长

3.索引字段涉及类型强转、mysql函数调用、表达式计算等,索引就用不上了

sql 复制代码
create index nameidx on student(name);

未创建索引时,搜索

创建索引后,搜索

未创建索引时

创建索引

创建索引后查询

索引字段涉及类型强转、mysql函数调用、表达式计算等,索引就用不上了(我们使用SQL时用的是int 1000000,而password是varchar,涉及类型强转)

改为字符串类型'1000000'不涉及类型强转,速度明显提升

加索引后,只扫描一行

相关推荐
奇树谦1 小时前
Qt | 利用map创建多个线程和定时器
网络·数据库·qt
用户47949283569151 小时前
性能提升 4000%!我是如何解决 运营看板 不能跨库&跨库查询慢这个难题的
数据库·后端·postgresql
电商API&Tina1 小时前
跨境电商 API 对接指南:亚马逊 + 速卖通接口调用全流程
大数据·服务器·数据库·python·算法·json·图搜索算法
robinson19882 小时前
验证崖山数据库标量子查询是否带有CACHE功能
数据库·oracle·cache·自定义函数·崖山·标量子查询
老华带你飞2 小时前
农产品销售管理|基于java + vue农产品销售管理系统(源码+数据库+文档)
java·开发语言·前端·数据库·vue.js·spring boot·后端
SelectDB2 小时前
5 倍性能提升,Apache Doris TopN 全局优化详解|Deep Dive
数据库·apache
JIngJaneIL3 小时前
基于springboot + vue房屋租赁管理系统(源码+数据库+文档)
java·开发语言·前端·数据库·vue.js·spring boot·后端
陈平安安3 小时前
设计一个秒杀功能
java·数据库·sql
isNotNullX3 小时前
数据处理的流程是什么?如何进行数据预处理?
数据库·数据资产管理·数据处理·企业数字化
TAEHENGV3 小时前
基本设置模块 Cordova 与 OpenHarmony 混合开发实战
android·java·数据库