SQL索引

--索引的定义,使用场景,常见的用法

索引是 对表中的数据进行排序之后,把数据以及所在的位置的行rowid都记录下来,记录到一个表当中(索引表)。当我们对数据进行查询的时候,首先 会差索引表,从索引表中查到rowid,直接访问rowid对应的行。

---在index表新建索引---
---索引格式

create index 索引名称 on 表名(字段1,字段2...);

--建索引例子

create index index_behavior on sample_index(behavior);

---怎么看一个表里面有哪些索引了? DDL

select * from user_indexes;   ---记录了 表明对应的所有索引名称

--查看索引名称

select * from user_indexes where lower(table_name)='emp_test';

--查看索引列

select * from user_ind_columns where lower(table_name)='emp_test';

---执行计划的字段解释
描述description : 计算的步骤
对象所有者: ODS,DWS,分层的用户
对象名称: 表名,索引名称
COST: 查询的消耗,COST越小越好,同样一个查询,如果索引的COST小,就查索引,否则从数据表中查询,不用索引
基数:查询的结果的数量
大小:查询的结果的数据量的大小(占空间)

---什么时候是用索引的效果最好?
过滤条件的值占的比重小于<10%, 反之 占90% 的时候,效果就不明显,或者慢了。

---什么时候需要用索引?
总体来说:数据量比较大的时候,对常用的查询的字段需要建立索引。 索引的数量不是越多越好,一般一个表中不超过5个。
具体要看你 需要优化的SQL来决定: 如果 SQL 中过滤添加有多个,建立索引的时候,就需要用多个字段


---索引不能太多
1. 索引会影响插入和更新过程,因为索引要随之重建/更新
2. 索引表会占用空间,索引字段越多,索引数量越多,占的空间也越多。


---什么场景下需要用到索引?
索引字段作为过滤条件 where,排序 order by, 分组 group by , 关联 join on 字段


--索引的优缺点?
有点: 1. 加快查询,避免全表扫描
缺点: 1. 额外占用空间 2. 影响更新和插入的速度


---索引的种类
1.主键 --特殊的索引,字段要唯一
创建主键的三种方法:

  • 1. 创建表的时候 字段后面加 primary key ---只能是一个字段
  • 2. 创建表的时候 使用约束创建主键,把约束作为其中一列,在所有字段的后面 constraint 约束名称 primary key (字段1,字段2)
  • 3. 建表完成之后,alter table 表名称 add constraint 约束名称 primary key (字段1,字段2)

---注意事项:表中以后的数据作为主键/唯一索引的字段的数据,不能重复,否则创建失败
2. 唯一索引 ---字段要唯一
create unique index 名称 on 表名(字段1,字段2) ----字段1和字段2的组合 要求唯一,是单独的字段1或者字段2 是可以重复的
3. 普通索引(一个字段)
create index
4. 组合索引
create index 名称 on 表名(字段1,字段2) --select count(*) from emp where deptno = 10 and job='SALESMAN';
5. 函数索引 --查询的字段带上了函数,那么 建立的索引字段也要带上函数

例如:

select count(*) from emp where to_char(hiredate,'yyyy-mmm-dd')='2012-08-23'; ---查询的时候大部分是有时间转换的

create index index_emp_hiredate on emp(to_char(hiredate,'yyyy-mmm-dd') );---创建索引时也要使用函数

6. bitmap 位图索引


---索引使用的时候应该注意什么? 什么时候会失效
---组合索引的使用规则
  ---组合索引

create index index_group on sample_index(item_id,behavior,category_id);

  ---普通索引

create index index_item_id on sample_index(item_id);


  ---组合索引 因为是先排序 再建索引。 字段的顺序是有要求的。

--where behavior= 
--where behavior= and item_id=
--where behavior= and item_id= and category_id=


注:组合索引 使用有规则,必须 按照索引建立的顺序来进行 加过滤条件查询

---查看常用的元数据存储位置
百度搜索 oracle 元数据查询的表
https://blog.csdn.net/qq_46550964/article/details/123915139

posted @ 2022-05-07 16:59  潜摩羯  阅读(113)  评论(0编辑  收藏  举报