1、索引
1.1概念
索引是一种数据结构,用于加快数据库中数据的检索速度。它类似于书籍的目录。
在数据库中,索引通常基于一个或多个列的值创建,并与数据表相关联。它们可以提供快速的数据查找和筛选功能,减少了查询时需要扫描的数据量,从而提高查询效率。
1.2原理
索引实现的原理就是缩小扫描的范围,避免全表扫描
例子:
1.3什么情况考虑加索引
1.数据量庞大
2.字段经常出现在where后面,以条件的形式存在,总是被扫描
3.该字段很少的delete insert update操作
1.4索引的类型
1.主键类型,会自动创建索引
2.唯一类型,添加unique约束,有创建唯一索引,值必须唯一
3.普通索引,普通字段添加索引就是普通索引
1.5索引存在的意义
提高查询的效率
1.6使用索引
1.6.1创建索引
正常索引:
它会按照键值的顺序构建一个树状结构,每个节点都包含多个键值,并根据键值进行排序。
create index 自定义索引名 on 表的名(要创建索引对应的字段);
例如 :
CREATE INDEX idx_employee_id ON employees (employee_id);
唯一索引:
唯一索引要求索引列的值是唯一的,可以防止重复的数据插入。
create unique index 自定义索引名 on 表的名(要创建索引对应的字段);
例如:
CREATE UNIQUE INDEX idx_employee_id ON employees (employee_id);
主键索引:
主键索引是一种特殊的唯一索引,它要求索引列的值是唯一的,并且不能为空。
它的创建在创建表的时候通过”PRIMARY KEY"关键字创建索引。
1.6.2删除索引
drop index 删除的索引名 on 要删除索引所在的表名;
当添加索引,数据库会根据b-tree(平衡二叉树)的数据结构去组织和管理索引,使得查找到节点的位置更快,不再需要全表扫描。
索引并非适用于所有情况,没必要的索引会导致额外的内存消耗,导致性能下降,因此应该根据具体情况使用索引。
1.7索引失效
1.模糊查询开头使用了%
select * from students where stu_name like ‘%红’;
即使stu_name 添加了索引数据库也不会使用索引,因为模糊查询开头使用了%。
解决:避免模糊查询使以%开头。
2.列表查询中使用了 OR 条件
当使用 OR 连接多个条件时,如果其中至少一个条件不是索引列,那么索引可能会失效,因为无法通过索引直接匹配。
3.小数据范围的查询
对于少量数据的查询,数据库可能认为全表扫描更高效,而不使用索引。
一个条件不是索引列,那么索引可能会失效,因为无法通过索引直接匹配。
3.小数据范围的查询
对于少量数据的查询,数据库可能认为全表扫描更高效,而不使用索引。