什么是数据库索引
在我理解来看数据索引与数组下标类似 是一个方便数据的检索的一种方法,使其能够快速的检索
索引呢有三种
单列索引(普通索引 主键索引 唯一索引 )
单列索引是一个索引中只有一行 但是一个表可以有多个单列索引
1.普通索引 : mysql中的基本索引,允许在其中插入空值和重复值,就是为了查询速度快一点
2.唯一索引: 就是查询出来不重复的值 可以为空值
3.主键索引: 是一种特殊的索引,不允许有空值(主键索引其实就是一个主键约束)
这里就要说到主键索引和唯一索引的区别了
1.主键索引是一中约束,而唯一索引是一种索引,在本质上不一样
2.主键被创建后就是唯一索引,但唯一索引不一定是主键
3.唯一索引可以为空 而主键不行
4.一个表只能有一个主键 可以有多个唯一索引
5.主键可以被其他外键所关联,而唯一索引不行
组合索引
故名知意就是在表中有多个索引的组合,也就是一个索引有多行,只是在查询条件中使用了这些字段的左边字段时,索引才会被启用,使用的时候要遵循最左前缀的集合
全文索引
这个只能在MyISAM引擎中才能使用,其实就是通过关键字进行全表查找,这样其实就占用了很多物理空间
这就就要说到数据库的四三种常见存储引擎了
innoDB存储引擎
支持事务,行锁定和外键,mysql的默认引擎
1.具有事务的回滚,恢复,提交的能力
2.其次是为处理巨大数据量设计的,所以他的CPU运行效率是任何其他基于磁盘关系型数据库引擎不能比的
3.它将表的和索引文件放在同一个逻辑表空间中,表空间可以包含数个文件,所以会快很多
4。支持外键完整性的约束
MyISAM存储引擎
拥有较高的插入速度和查询速度,当不支持事务,
1.大文件(达到63位最大长度)在支持大文件的的文件系统和操作系统上被支持
2.当使用删除修改的时候会产生更小的碎片
3.最大键是1000字节,但是可以通过编译增加容量
4.每个Myisam表最大索引是64 每个索引的最大列数是16
5.每个myisam表的创建都有 frm MYD MYI所以是比较占空间的
Memory存储引擎
将数据存在内存,为了提高数据的访问速度,每一个表实际上和一个磁盘文件关
1.支持的数据类型有限制,比如:不支持TEXT和BLOB类型,对于字符串类型的数据,只支持固定长度的行,VARCHAR会被自动存储为CHAR类型;
2.支持的锁粒度为表级锁。所以,在访问量比较大时,表级锁会成为MEMORY存储引擎的瓶颈;
3.由于数据是存放在内存中,一旦服务器出现故障,数据都会丢失
4.查询的时候,如果有用到临时表,而且临时表中有BLOB,TEXT类型的字段,那么这个临时表就会转化为MyISAM类型的表,性能会急剧降低;
5.默认使用hash索引。
6.如果一个内部表很大,会转化为磁盘表。
索引的优点
1.通过唯一性索引保证了没一行的唯一性
2.加快了检索速度
3.加速表与表之间的链接
4.在用分组和排序子句进行检索的时候,更快了
5.在使用索引的时候可以使用优化隐藏器
索引的缺点
1.创建和维护索引需要时间和空间
2.当对数据进行增删改查的时候,索引也要进行动态的维护,降低了数据的维护速度