什么是索引
- 帮助Mysql高效获取数据的数据结构
- 索引就是数据结构
- 类似新华字典的索引目录,可以通过索引目录快速查到你想要的字
- 排好序的快速查找数据
为什么要建立索引
- 提高查询效率 没有排序之前一个一个往后找 通过索引进行排序之后,可以直接定义到想要的位置
- 排好序的快速查找数据结构-->就是索引
优势
- 索引类似大学图书馆建立的书目索引,提高数据检索的效率,降低数据库的IO成本
- 通过索引对数据项进行排序,降低数据排序成本,降低了CPU的消耗
劣势
- 一般来说, 索引本身也很大, 索引往往以文件的形式存储到磁盘上
- 索引也是一张表,该表保存了主键与索引字段,并指向实体表的记录.所以索3引也是要占磁盘空间的
- 虽然索引提高了查询速度,但是会降低更新表的速度.
- 因为更新表时, MYSQL不仅要保存数据,还要保存一下索引文件每次更新添加了索引列的字段,
- 会调整因为更新所带来的键值变化后索引的信息
索引分类
- 单值索引
一个索引只包含间个列,一个表可以有多个单值索引 一般来说, 一个表建立索引不要超过5个- 唯一索引 索引列的值必须唯一,但允许有空值
- 复合索引 一个索引包含多个列
- 全文索引
MySQL全文检索是利用查询关键字和查询列内容之间的相关度进行检索, 可以利用全文索引来提高匹配的速度。
索引为什么能快速查找数据
- 二叉查找树
- B-Tree
- B+Tree
基本语法
创建索引
create [UNIQUE] index 索引名称 ON 表名(字段(长度))
alter 表名 add [unque] index[索引名称] on(字段(长度))
查看索引
show index from 表名
删除索引
drop index[索引名称] on 表名
更改索引
添加一个主键,索引必须是唯一索引,不能为NULL
alter table tab_name add primary key(column_list)
创建的索引是唯一索引,可以为NULL
alter table tab_name add unque index_name(column_list)
普通索引,索引值可出现多次
alter table tab_name add index index_name(column_list)
全文索引
alter table tab_name add fulltext index_name(column_list)
索引建立选择
适合建立索引
- 主键自动建立唯一索引
primary - 频繁作为查询条件的字段应该创建索引
比如银行系统银行帐号,电信系统的手机号 - 查询中与其它表关联的字段,外键关系建立索引
比如员工,部门外键 - 频繁更新的字段不适合建立索引
每次更新不单单更新数据,还要更新索引 - where条件里用不到的字段不建立索引
查询中排序的字段,排序的字段若通过索引去访问将大提升排序速度
索引能够提高检索的速度和排序的速度
查询中统计或分组的字段
分组的前提是必排序