0
点赞
收藏
分享

微信扫一扫

【MySQL】-数据库优化(索引)

介绍

概念

索引(index)是帮助数据库高效获取数据数据结构

在没有索引的情况下是如何查找【MySQL】-数据库优化(索引)_索引

是从上往下依次进行配对查找,那么找到age = 45 以后是否还需要往下找呢?如果这个age字段不是唯一的,还需要继续往下找,直到找到最后,这叫做全表扫描,如果数据很多,就会导致性能很低

那么索引所用到的数据结构是什么呢?

二叉搜索树(底层并不是二叉搜索树,原因等会会说)【MySQL】-数据库优化(索引)_B+Tree_02

索引的存在就跟书本的目录是一样的,一本书如果没有目录,当我们想找某一页内容时,会非常耗时,但是有了目录,我们就能很快定位到。

优缺点

优点:

提高数据查询的效率,降低数据库的IO成本。

通过索引列对数据进行排序,降低数据排序的成本,降低CPU消耗。

缺点:

索引会占用存储空间。

索引大大提高了查询效率,同时却也降低了insert、update、delete的效率。

结构

MySQL数据库支持的索引结构有很多,如:Hash索引、B+Tree索引、Full-Text索引等。我们平常所说的索引,如果没有特别指明,都是指默认的B+Tree结构组织的索引。

我为什么没有用二叉搜索树或者红黑树呢?

【MySQL】-数据库优化(索引)_索引_03

二叉搜索树容易出现一边倒的问题,红黑树虽然能解决这个问题,但是,在大数据量情况下,层级深,检索速度慢

B+Tree(多路平衡搜索树)【MySQL】-数据库优化(索引)_B+Tree_04

上面这部分叫非叶子结点,不用于保存任何数据

【MySQL】-数据库优化(索引)_B+Tree_05

下面这部分叫做叶子结点,用于保存数据

【MySQL】-数据库优化(索引)_索引_06

B+Tree的三个特点:

每一个节点,可以存储多个key(有n个key,就有n个指针)。

所有的数据都存储在叶子节点,非叶子节点仅用于索引数据。

叶子节点形成了一颗双向链表,便于数据的排序及区间范围查询。

语法

创建索引

create [ unique ] index索引名on表名(字段名,...);

查看索引

show index from表名;

删除索引

drop index索引名on表名;

例子:

-- 创建:为tb_emp表的name字段建立一个索引.
create index idx_emp_name on tb_emp(name);
-- 查询:查询tb_emp表的索引信息.
show index from tb_emp;
-- 删除:朋除tb _emp表中name字段的索引.
drop index idx_emp_name on tb_emp;

【MySQL】-数据库优化(索引)_索引_07

【MySQL】-数据库优化(索引)_字段_08

【MySQL】-数据库优化(索引)_字段_09

注意事项

主键字段,在建表时,会自动创建主键索引(所有索引当中性能最高)。

添加唯一约束时,数据库实际上会添加唯一索引。


举报

相关推荐

0 条评论