MySQL索引总结

1、 索引的含义
索引是是对数据库表中一列或者多列进行排序的一种数据结构,是单独的,存储于磁盘上的数据库结构。MySQL的索引存储类型有两种:BTREE和HASH,MyISAM和InnoDB只支持BTREE索引。
2、 索引的分类
2、1普通索引和唯一索引
普通索引是MySQL索引中的基本索引类型,允许该索引列中有重复值和空值。
唯一索引要求该索引列的值必须唯一,但允许有空值。另外,主键索引是一种特殊的唯一索引,它特殊在于不允许空值。
2、2单列索引和组合索引
单列索引即一个索引只包含一个列,组合索引即在一个表的多个列中建立索引,组合索引的使用遵循“最左前缀”原则。
2、3全文索引
即在定义索引的列支持全文(表)查找,允许这些索引列中有空值和空值。全文索引可以在CHAR,VARCHAR,TEXT类型上创建,MySQL只有MyISAM支持全文索引。
2、4空间索引
空间索引是对空间数据类型字段创建的索引,MySQL的空间数据类型有四种,分别是:GEOMETRY、POINT、LINESTRING、POLYGON,创建空间索引的列必须声明为非空。
3、 索引的优缺点
优点:
(1) 通过唯一索引,可以保证数据表中每一行数据的唯一性。
(2) 可以大大加快数据库的查询速度。
(3) 可以加速表与表的连接。
(4) 使用分组和排序时,使用使用索引能提高性能。
缺点:
(1) 创建索引和维护索引要耗费时间。
(2) 索引占据磁盘空间。
(3) 对数据库进行增加、删除、更改操作时,索引也需要动态动态的维护,因此 降低了数据的味素速度。
4、 索引的设计原则
鉴于索引的优缺点明显,因此,我们需要约定一些索引的设计原则,以最大限度 提高MySQL数据库性能,具体如下:
(1) 索引并不是越多越好,因为不仅会占用磁盘空间,还会影响UPDATE、DELECT、INSERT的性能。
(2) 避免对经常更新的表建立过多的索引,并且索引中的列尽可能的少,应当在经常查询的表添加索引,但要避免添加不必要的字段。
(3) 数据量小的表最好不要建立索引。
(4) 在条件表达式中经常用到不同值较多的列上建立索引,在不同值很少的列上不要建立索引。比如一个列只有“男女”两个取值,若建立索引,并不会提高效率,反而大大降低更新速度。
(5) 对数据具有唯一性的列添加索引,可以确保数据的完整性,唯一性,提高查询速度。
(6) 在频繁进行排序,分组的列上建立索引,若有多个列,则建立组合索引。
5、 创建索引
创建索引有两种方式,一种是在创建表时建立索引,一种在建表后在已存在的表上建立索引。
5、1创建表时建立索引
语法格式为:
CREATE TABLE table_name( col_name data_type,……
[UNIQUE | FULLTEXT | SPATIAL] [INDEX | KEY] [index_name] (col_name[length]) [ASC | DESC] )
语法解析:
UNIQUE,FULLTEXT,SPATIAL为可选参数,分别表示:唯一索引,全文索引,空间索引;INDEX与KEY作用相同,用指定创建索引;index_name为索引名字,可选,若不指定,默认与该列名称相同;col_name为必选参数,用来指定为哪个列建立索引,里面的length参数为可选,表示索引长度,只有字符串类型的字段才能指定索引长度;ASC,DESC表示索引值存储的排序策略。
(1) 创建普通索引
CREATE TABLE test_index(
id INT NOT NULL,
……………..
INDEX id_index (id)
);
(2) 创建唯一索引
CREATE TABLE test_index(
id INT NOT NULL,
……………..
UINQUE INDEX id_index (id)
);
(3) 创建组合索引
CREATE TABLE test_index(
id INT NOT NULL,
name VARCHAR(255) NOT NULL,
…………..
INDEX mul_index(id,name(10))
);
(4) 创建全文索引
CREATE TABLE test_index(
id INT NOT NULL,
name VARCHAR(255) NOT NULL,
…………..
FULLTEXT full_index(name(10))
) ENGINE=MyISAM;
5、2在已存在的表建立索引
在已存在的表创建索引有两种方法,分别是使用ALTER TABLE …..ADD 和CREATE INDEX语句来创建索引。
语法分别如下:
ALTER TABLE table_name ADD [UNIQUE | FULLTEXT | SPATIAL] [INDEX | KEY] [index_name] (col_name(length),….) [ASC | DESC]

        CREATE [UNIQUE | FULLTEXT | SPATIAL]  [INDEX | KEY]

index_name ON table_name (col_name[(lenghth)],….) [ASC | DESC]
6、 删除索引
语法如下:
ALTER TABLE table_name DROP INDEX index_name;
或者:
DROP INDEX index_name ON table_name;
注意:添加“AUTO_INCREMENT”约束字段的索引不能被删除。
7、 索引的数据结构
MyISAM和InnoDB引擎支持BTREE类型的索引,所以,索引的底层数据结构为B+树。
7、1 B+树介绍及索引原理分析
待完善!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值