select * from user_innodb where name=‘波波’
我们看到的查询时间是2.214秒。那如果我们给这张表的name
字段加上索引会怎么样呢?
ALTER TABLE user_innodb
ADD INDEX idx_user_name
(name
) USING BTREE ;
创建索引会比较耗时间,耐心等待会~ 创建成功后我们再次执行相同的查询语句效果如下
通过对比发现,有索引的请求比没有索引的情况,效果相差了几十倍上百倍。通过这个案例大家应该可以非常直观地感受到,索引对于数据检索的性能改善是非常大的。
那么索引到底是什么呢?为什么可以对我们的查询产生这么大的影响?创建索引的时候发生了什么事情?
维基百科对数据库索引的定义:
数据库索引,是数据库管理系统(DBMS)中一个
排序
的数据结构
,以协助快速查询、更新数据库表中数据。
数据是以文件的形式存放在磁盘上面的,每一行数据都有它的磁盘地址。如果没有索引的话,我们要从500万行数据里面检索一条数据,只能依次遍历这张表的全部数据,直到找到这条数据。
但是我们有了索引之后,只需要在索引里面去检索这条数据就行了,因为它是一种特殊的专门用来快速检索的数据结构
,我们找到数据存放的磁盘地址以后,就可以拿到数据了。
在MySQL的所有中支持三种索引类型
| 类型 | 描述 |
| — | :-- |
| Normal | 普通索引 |
| Unique | 唯一索引 |
| Fulltext | 全文索引 |
Normal
也叫非唯一索引,是最普通的索引,没有任何的限制
直接创建索引
CREATE INDEX index_name ON table(column(length))
修改表结构的方式添加索引
ALTER TABLE table_name ADD INDEX index_name ON (column(length))
创建表的时候同时创建索引
CREATE TABLE table
(
id
int(11) NOT NULL AUTO_INCREMENT ,
title
char(255) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL ,
content
text CHARACTER SET utf8 COLLATE utf8_general_ci NULL ,
time
int(10) NULL DEFAULT NULL ,
PRIMARY KEY (id
),
小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。
深知大多数初中级Java工程师,想要提升技能,往往是自己摸索成长,但自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!
因此收集整理了一份《2024年最新Java开发全套学习资料》送给大家,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。
由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频
如果你觉得这些内容对你有帮助,可以添加下面V无偿领取!(备注Java)
这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频**
如果你觉得这些内容对你有帮助,可以添加下面V无偿领取!(备注Java)
[外链图片转存中…(img-myyjrX2u-1710887270182)]