笔记-6:mysql索引
1.索引概述
建立索引的目的:加快数据库检索的速度。
mysql中索引主要分为:
- 普通索引:使用index或key关键字创建,其索引列值可以取空值或重复值。
- 唯一性索引:使用关键字UNIQUE创建,其索引列值不能重复,且必须唯一,但可以是空值。
- 主键索引:使用关键字primary key创建,主键索引是一种唯一性索引,但是其列值不能为空。
- 聚簇索引:聚簇索引的索引顺序就是数据存储的物理顺序。一个表只能有一个聚簇索引,且只有solidDB和InnoDB存储引擎才支持。
- 全文索引:只能创建在varchar或text的列上。且只支持MyISAM存储引擎。
- 单列索引:在某一个列上创建一个索引,一个表可以创建多个单列索引。
- 组合索引:在表的多个列上创建一个索引。比如在班级表tb_class的‘所属学院’和‘年级’上建立一个索引,此索引称为组合索引。索引遵循最前缀法则。即先按照第一列进行排序,当第一列值相同时再对第二列排序。
2.查看数据表上所建立的索引
# 语法格式:
SHOW {INDEX | INDEXES | KEYS} {FROM | IN} tb_name [{FROM | IN} db_name] # { | }:多选
# [ ]:可选
# 显示tb_score表上所有索引的信息
show index from tb_score \G; # \G:简化
索引结果:
- Table:指明索引所在表的名称。
- Non_name:该索引是否不是唯一性索引,1:不是,0:是
- Key_name:索引的名称。如果在创建索引时没有指明索引名,则系统会自动指定一个索引名。
- Column_name:建立索引的列名称。
- Collation:说明以何种顺序(升序或降序)索引。A:升序,NULL:无分类。
3.创建索引
3.1 索引create table语句创建索引
# 语法格式:
create table tb_name[col_name data_type]
[CONSTRAINT index_name] [UNIQUE] [INDEX | KEY]
[index_name](index_col_name[length]) [ASC | DESC] # tb_name:建立索引的表名
# index_name:指定所建立的索引名称。
# UNIQUE:创建唯一性索引。
# index_col_name:指定要创建索引的列名。
# length:指定使用列的前length个字符创建索引。
# ASC | DESC:指定索引是按ASC还是DESC排序,默认为ASC。
# 创建新表的同时创建普通索引、唯一性索引
create table tb_score(
studentNo char(10) not null UNIQUE, # studentNo字段建立唯一性索引
studentName varchar(20) not null,
sex char(2) not null,
birthday date,
native varchar(20),
nation varchar(10) default '汉',
classNo char(6),
index(studentName) # studentName 字段建立普通索引
);
# 创建新表的同时创建主键索引
create table tb_score(
studentNo char(10),
courseNo char(5),
score float,
constraint PK_score primary key (studentNo,courseNo), # studentNo、courseNo字段分别创建主键索引
constraint FK_score1 foreign key (studentNo) references tb_student (studentNo),
constraint FK_score2 foreign key (courseNo) references tb_course (courseNo)
);
3.2 使用create index语句创建索引
# 语法格式:
create table [UNIQUE] INDEX index_name ON tb_name (col_name [(length)] [ASC | DESC]);
# 在tb_student表上创建一个普通索引,索引字段是studentNo
create index index_stu ON tb_student(studentNo); # index_stu:索引名
在tb_course表上创建一个索引,要求按课程名称courseName字段值前三个字符建立降序索引。
create index index_course ON tb_course(courseName(3) DESC); # 对于字符类型排序,英文按照字母排序;中文在mysql中按照汉语拼音对应的英文字母顺序进行排序。
# 在tb_book上建立图书类别(ASC)和书名(DESC)的组合索引,索引名为index_book。
create index index_book ON tb_book(bclassNo ASC,bookName DESC);
3.3 使用alter table语句创建索引
# 语法格式:
alter table tb_name add [UNIQUE | FULLTEXT] [INDEX | KEY] [index_name] (col_name[length] [ASC | DESC])
# 使用alter table 语句创建普通索引
alter table tb_student ADD INDEX idx_studentName(studentName);
4.删除索引
4.1 使用drop index语句删除索引
# 语法格式:
drop index index_name ON tb_name # index_name:要删除的索引名
# tb_name:索引所在的表
# 删除tb_student表上的索引idx_studentName。
drop index idx_studentName ON tb_student;
4.2 使用alter table语句删除索引
# 语法格式:
alter table tb_name drop index index_name
# 删除tb_student表上的索引index_stu
alter table tb_student drop index index_stu;
5.使用索引的建议
- 索引可以提高数据查询的效率,但是过多的使用索引会影响数据更新的速度,不恰当的使用索引会降低系统性能。因此在操作频繁的数据表上避免过多的建立索引。
- 数据量小的表最好不要建立索引。
- 使用组合索引时,严格遵循最左前缀法则。
- 避免在不同值比较少的字段上建立索引,比如:性别。
笔记-6:mysql索引的更多相关文章
- SQL学习笔记之MySQL索引知识点
0x00 概述 之前写过一篇Mysql B+树学习,简单的介绍了B+数以及MySql使用B+树的原因, 有了这些基础知识点,对MySql索引的类型以及索引使用的一些技巧,就比较容易理解了. 0x01 ...
- 吴裕雄--天生自然MySQL学习笔记:MySQL 索引
MySQL索引的建立对于MySQL的高效运行是很重要的,索引可以大大提高MySQL的检索速度. 打个比方,如果合理的设计且使用索引的MySQL是一辆兰博基尼的话,那么没有设计和使用索引的MySQL就是 ...
- Mysql数据库学习笔记之数据库索引(index)
什么是索引: SQL索引有两种,聚集索引和非聚集索引,索引主要目的是提高了SQL Server系统的性能,加快数据的查询速度与减少系统的响应时间. 聚集索引:该索引中键值的逻辑顺序决定了表中相应行的物 ...
- 【笔记】MySQL学习之索引
[笔记]MySQL学习之索引 一 索引简单介绍 索引,是数据库中专门用于帮助用户快速查询数据的一种数据结构.类似于字典中的目录,查找字典内容时可以根据目录查找到数据的存放位置,然后直接获取即可. 普通 ...
- 关于Mysql索引的笔记
MySQL索引原理 索引目的 索引的目的在于提高查询效率,可以类比字典,如果要查“mysql”这个单词,我们肯定需要定位到m字母,然后从下往下找到y字母,再找到剩下的sql.如果没有索引,那么你可能需 ...
- SQL学习笔记五之MySQL索引原理与慢查询优化
阅读目录 一 介绍 二 索引的原理 三 索引的数据结构 四 聚集索引与辅助索引 五 MySQL索引管理 六 测试索引 七 正确使用索引 八 联合索引与覆盖索引 九 查询优化神器-explain 十 慢 ...
- Mysql 索引复习笔记
之前学习索引后由于一直没怎么用,所以也只是粗略看了一下,最近发现索引的用处很大,并且也很多知识点,在此做复习记录. 什么是索引? 百度百科是这样描述的: 索引是为来加速对表中数据行中的检索而创建的一种 ...
- Mysql索引学习笔记
1.btree索引与hash索引 下列范围查询适用于 btree索引和hash索引: SELECT * FROM t1 WHERE key_col = 1 OR key_col IN (15,18,2 ...
- MySql索引笔记
MySQL 索引是什么 MySQL索引的建立对于MySQL的高效运行是很重要的,索引可以大大提高MySQL的检索速度. 打个比方,如果合理的设计且使用索引的MySQL是一辆兰博基尼的话,那么没有设计和 ...
- Mysql索引最佳实践笔记0524
#mysql5.7 innodb默认存储引擎 一.关于索引二.最佳实践三.避坑实践 一.关于索引 1.索引的作用 -提高查询效率 -数据分组.排序 -避免回表查询 -优化聚集查询 -用于多表join关 ...
随机推荐
- nodejs爬虫案例笔记
用nodeJs制作一个简单的网页爬虫 主要分为三个步骤,向目标请求数据,处理数据,打印数据.需要用到的模块有http,cheerio. 1.准备步骤,引入要使用的模块 2.向目标请求数据 http.g ...
- Apache Flink - Window
Window: 在Streaming中,数据是无限且连续的,我们不可能等所有数据都到才进行处理,我们可以来一个就处理一下,但是有时我们需要做一些聚合类的处理,例如:在过去的1分钟内有多少用户点击了我们 ...
- Django 测试开发3 数据模型models和admin管理工具
参考:https://blog.csdn.net/weixin_44510615/article/details/89425412 1.Django模型字段常用类型: IntegerField : 整 ...
- OpenJudge计算概论-苹果和虫子
/*======================================================== 苹果和虫子 总时间限制: 1000ms 内存限制: 65536kB 描述 你买了一 ...
- 手把手教你MyEclipseUML建模(上)
手把手教你MyEclipseUML建模(上) 转 https://blog.csdn.net/qq_37939251/article/details/83444359 1.用UML 1建模 MyEcl ...
- xss绕过姿势
#未完待续... 00x1.绕过 magic_quotes_gpc magic_quotes_gpc=ON 是php中的安全设置,开启后会把一些特殊字符进行轮换, 比如: ' 会被转换为 \' 再比如 ...
- Jupyter Notebook 远程连接配置(转载)
转载博客的Jupyter Notebook远程连接配置方法. 0 - 参考资料 https://www.jianshu.com/p/08f276d48669?utm_campaign=maleskin ...
- office激活方式,超简单
只需要安装个小小的程序,亲测安全可靠 详情点击下方链接 https://blog.csdn.net/weixin_40941966/article/details/80872533
- react 表单组件 异步渲染,值不会生效,需要手动改变对应组件的显示值
楼主遇到这个问题已经是第二次,上次我们项目经理给帮忙解决了一次,这次又遇到了,刚开始不知道是这个问题,上次做的笔记也没找到了,估计又忘记了,这里抽三分钟记录一下, 当然这里这样做有个前提:就是你已经和 ...
- python:一行代码实现局域网共享文件
其实就是使用python内置的一个模块http server 在python2中是下面这样的 python -m SimpleHTTPServer 80 解释下上面的参数,-m表示让python使用一 ...