使用索引的主要目的是为了提高从表中检索数据的速度。
由于数据存储在数据库表中,所以索引是创建在数据库表对象上的,由表中的一个字段或多个字段生成的键组成,这些键存储在数据结构(B-tree或哈希表)中,因此根据索引的存储类型,可以将索引分为B型索引和哈希索引。
B-tree和哈希索引(转):https://blog.youkuaiyun.com/lovezhaohaimig/article/details/80303613
Mysql一共支持6种索引:普通索引,唯一索引,全文索引,单列索引,多列索引和空间索引。
索引的创建有利有弊,可以提高查询效率,但是过多的创建索引会占用许多的磁盘空间。
以下情况下适合创建:
(1)经常被查询的字段,即在where子句中出现的字段
(2)在分组的字段,即在groupby子句中出现的字段
(3)存在依赖关系的子表和父表之间的联合查询,即主键或外键字段
(4)设置唯一完整性约束的字段
不适合:
(1)在查询中很少使用的字段
(2)拥有许多重复值得字段。
普通索引的创建(其他索引都是在普通索引上加修饰词):
1.创建表时创建普通索引:
其格式就是INDEX|KEY +索引名(属性名)
查看索引是否被使用:explain+查询语句,记得在此处\G后面不加分号,否则会报No query specified
2.在已经存在的表上创建索引:
CREATE+INDEX+索引名+on+表名+属性名
查看是否成功:show create table+表名+\G(后面不加分号)
此时:
创建和查看唯一索引:
(1)创建表时创建唯一索引(除了添加unique,其他没有区别)
其格式就是 UNIQUE INDEX|KEY +索引名(属性名)
(2)在已经存在的表上创建唯一索引
CREATE+UNIQUE+INDEX+索引名+on+表名(属性名)
(3)通过alter来创建唯一索引
ALTER TABLE +表名 +ADD + UNIQUE INDEX|KEY +索引名(属性名)
创建和查看全文索引
全文索引主要关联在数据类型为char,vachar和text的字段上,以便能够更加快捷的查询数据量较大的字符串类型的字段,(该索引只能在存储引擎为MyISAM的数据库表上创建)默认情况下,全文索引的搜索方式不区分大小写,但是如果全文索引所关联的字段是二进制数据类型,则区分大小写。
(1)创建表时创建全文索引
格式为:FULLTEXT INDEX|KEY +索引名(属性名)
(2)在已经存在的表上创建全文索引
CREATE+FULLTEXT +INDEX+索引名+on+表名(属性名)
(3)通过alter来创建全文索引
ALTER TABLE +表名 +ADD + FULLTEXT INDEX|KEY +索引名(属性名)
创建和查看多列索引
所谓多列索引就是在创建索引时,关联的字段不是一个,而是多个字段
(1)创建表时创建多列索引
格式为:INDEX|KEY +索引名(属性名,属性名,。。。。)
(2)在已经存在的表上创建多列索引
CREATE+INDEX+索引名+on+表名(属性名,属性名,。。。。)
(3)通过alter来创建全文索引
ALTER TABLE +表名 +ADD + FULLTEXT INDEX|KEY +索引名(属性名,属性名,。。。。)
删除索引
DROP+INDEX+索引名+on+表名