赞
踩
目录
索引是一种特殊的文件,包含着对数据表里所有记录的引用指针。可以对表中的一列或多列创建索引, 并指定索引的类型,各类索引有各自的数据结构实现。
注意:数组下标,目录,索引这三个是不同的术语,虽然它们的英文都是 index 但是表示的含义各不相同,希望友友们不要混淆。
本文章主要讲解MySQL中的索引及事务。
• 数据库中的表、数据、索引之间的关系,类似于书架上的图书、书籍内容和书籍目录的关系。
• 索引所起的作用类似书籍目录,可用于快速定位、检索数据。
• 索引对于提高数据库的性能有很大的帮助。
主要体现在下面两点:
• 索引本身要占据存储空间。
• 索引能提高查询速度,但是可能会拖慢增删改的速度(对数据进行增删改都是要同步更新索引的)。
要考虑对数据库表的某列或某几列创建索引,需要考虑以下几点:
• 数据量较大,且经常对这些列进行条件查询(索引是用在条件查询的时候)。
• 该数据库表的插入操作,及对这些列的修改操作频率较低。
• 索引会占用额外的磁盘空间。
满足以上条件时,考虑对表中的这些字段创建索引,以提高查询效率。
相反,如果非条件查询列,或经常做插入、修改操作,或磁盘空间不足时,不考虑创建索引。
创建主键约束(PRIMARY KEY)、唯一约束(UNIQUE)、外键约束(FOREIGN KEY)时,会自动创建对应列的索引。
例如下图:只需关注画红框的这几个即可,至于如何查看表中的索引,后续马上讲到。
通过sql我们能够创建索引,查看索引,删除索引。
• 查看索引
sql脚本语法:
show index from 表名;
案例:查看学生表已有的索引
show index from student;
问题:为什么建立外键约束时,子表中的对应列(外键)为什么也要建立索引?
解答:在父表中进行删除修改的时候要去子表查询(如果子表有对应外键那么要先修改子表).为了让子表查询的速度加快,所以这里加上了索引。
• 创建索引
sql脚本语法:
create index 索引名 on 表名(字段名);
案例:创建班级表中,name字段的索引。
create index idx_classes_name on classes(name);
注意1:创建索引都是根据具体的列来创建的,所以后续查询的时候,也必须针对这一列进行条件查询才能够通过索引来提速。
注意2:索引的创建是一个危险操作。如果表中的数据不多,创建索引啥的哪都无所谓。如果表本身很大,这个时候进行创建索引操作,就会引起大量的 CPU / 硬盘 IO 的消耗,也是可能会把数据库给搞挂了的(年终奖也挂了
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。