MySQL 入门(六)—— 索引
来源:互联网 发布:linux execl 返回值 编辑:程序博客网 时间:2024/06/06 04:30
索引是一种特殊的数据库结构,可用来快速查询数据库表中的特定记录。MySQL中,所有的数据类型都可以被索引。MySQL的索引包括普通索引、唯一性索引、全文索引、单列索引、多列索引和空间索引等。
1、索引简介
索引是创建在表上的,是对DB表中一列或多列的值进行排序的一种结构。
不同的存储引擎定义了每个表的最大索引数和最大索引长度。所有存储引擎对每个表至少支持16个索引,总索引长度至少为256字节。
索引有两种存储类型,包括B型树索引和哈希索引。InnoDB和MyISAM支持BTREE索引,MEMORY支持HASH索引和BTREE索引,并默认为前者。
索引也有缺点:创建和维护需要耗费时间,且耗费时间随着数据量的增加而增加;占用物理空间;增加、删除和修改数据时,要动态的维护索引,造成数据的维护速度降低。
特别地,索引可以提高查询速度但是会影响插入记录的速度。因为,向有索引的表中插入记录时,系统会按照所有进行排序在进行插入。因此,在插入大量记录时,最好先删除删除表中的索引,然后插入数据,最后再创建索引。
1.1 索引的分类
(1) 普通索引
普通索引在创建时,不附加任何约束条件。普通索引可以创建在任何数据类型中,其值是否唯一和非空由字段本身的完整性约束条件决定。
(2) 唯一性索引
使用UNIQUE参数可以设置索引为唯一性索引。即对于表A中的字段a中创建唯一性索引,那么字段a的值必须是唯一的。
通过唯一性索引,可以更快速地确定某条记录。
主键就是一种特殊唯一性索引。
(3)全文索引
使用FULLTEXT参数可以设置索引为全文索引。全文索引只能创建在CHAR、VARCHAR或TEXT类型的字段上。
查询数据量较大的字符串类型的字段时,使用全文索引可以提高查询速度。
注意只有MyISAM存储引擎支持全文索引。
默认情况下,全文索引的搜索执行方式不区分大小写,但索引的列使用二进制排序后,可以执行区分大小写的全文索引。
(4)单列索引
单列索引即在表中的单个字段上创建索引。单列索引可以是普通索引、唯一性索引,也可以是全文索引。
(5)多列索引
注意只有查询条件中使用了这些字段中的第一个字段时,索引才会被使用。
(6)空间索引
使用SPATIAL参数可以设置索引为空间索引。空间索引只能建立在空间数据类型上,这样可以提高系统获取空间数据的效率。MySQL中的空间数据类型包括GEOMETRY和POINT、LINESTRING和POLYFON等。
同样,目前只有MyISAM存储引擎支持空间索引,且索引的字段不能为空值。
1.2 索引的设计原则
(1)经常需要ORDER BY、GROUP BY、DISTINCT和UNION等操作的字段,排序会浪费很多时间,有必要为这些字段建立索引。
(2)如果某个字段经常用来做查询条件,为其建立索引,可以提高整个表的查询速度。
(3)一方面,索引会占用磁盘空间,另一方面,修改表时,对索引的重构和更新很麻烦,有必要限制索引的数目。
(4)如果索引的值很长,也会影响查询的速度,因此,尽量使用数据量少的索引。
(5)当索引字段的值很长时,最好使用值的前缀来索引。
(6)当表中的数据被大量更新,或者数据的使用方式被改变后,原有的一些索引可能不再需要,此时有必要将其删除,减少索引对更新操作的影响。
2、创建索引
创建索引指在某个表的一列或多列上建立以个索引,以提高对表的访问速度。具体有以下三种方式
2.1 创建表的时候创建索引
其中,参数INDEX和KEY用来指定字段为索引的,两者选一即可,作用一样;别名用于给创建的索引取新名字;属性1即指定索引对应字段的名称,显然该字段必须是前面已定义好的字段;长度指索引的长度,只有字符串类型才可以使用;ASC和DESC分别表示升序排列和降序排列。
2.2 在已经存在的表上创建索引
其中,参数索引名即给创建的索引取的新名字。
2.3 用ALTER TABLE语句来创建索引
在已经存在的表上,可以用ALTER TABLE语句来创建索引
上面这个提供了好多选项,只是一个总的模板,具体的要看实际情况添加不同的选项,
例:在 four 这个表中给 姓名 这个列添加普通索引,索引的名称叫 qwe:
1.添加PRIMARY KEY(主键索引)mysql>alter table four add primary key(姓名);
2.添加UNIQUE(唯一索引)
mysql>alter table four add unique (姓名);
3.添加INDEX(普通索引)
mysql>alter table four add index qwe (姓名);
4.添加FULLTEXT(全文索引)
mysql>alter table four add fulltext (姓名);
5.添加多列索引
mysql>alter table four add index qwe ( 姓名,学号 );
3、删除索引
具体语言为
例:要删除索引的话:
drop index qwe on four;
- MySQL 入门(六)—— 索引
- MySQL 入门(六)—— 索引
- mysql数据库(六)索引
- MySQL入门学习笔记(1)——索引
- mysql 入门基础(2)—外键、主键和索引
- MySQL入门学习(六)
- MySQL入门学习(六)
- MySQL入门学习(六)
- MySQL入门学习(六)
- MySQL入门学习(六)
- MySQL入门学习(六)
- 年终大学习之MySQL数据库优化学习笔记(六) ——索引(一)
- Mysql入门(六)之联合查询
- MySQL数据库入门--读书笔记(六)
- MySQL索引入门实例
- MYSQL索引入门
- Mysql之索引入门
- MySQL入门之索引
- HTTP Status 500 - Could not write content: failed to lazily initialize a collection of role
- radio和文字对齐
- Django学习
- ActiveMQ
- 数据结构实验:连通分量个数
- MySQL 入门(六)—— 索引
- 1.2机器学习基础下--python深度机器学习
- 带指示器的ViewPager循环翻页的实现
- 一些自己的观点
- Android中MD5加密操作代码
- Python新手学习基础之条件语句——elif语句
- 利用VMware在虚拟机上安装Zookeeper集群
- RegexUtils(常用验证方法)
- 自定义View