数据库索引类型(mysql有几种索引类型)

概述今天主要介绍Oracle数据库的三种索引类型,仅供参考。一、B-Tree索引三个特点:高度低,存储列值,结构有序。1.1使用索引功能进行优化。在外键上索引:

概述

今天主要介绍Oracle数据库的三种索引类型,仅供参考。

数据库索引类型(mysql有几种索引类型)插图

一、B-Tree索引

三个特点:高度低,存储列值,结构有序。

1.1使用索引功能进行优化。

在外键上索引:既能提高查询效率,又能有效避免锁竞争(如果没有提交删除记录,外键所在的表将被锁定)。

统计类查询SQL:count(), avg(), sum(), max(), min()排序操作:order by字段建立索引去重操作:distinctUNION/UNION ALL:union all不需要去重,不需要排序

1.2联合指数

场景SQL查询列很少,建立查询列的联合索引可以有效地消除返回表。但是,通常情况下,包含三个以上字段的联合索引是不合适的。
场景二:A字段返回的记录多,B字段返回的记录多,同时查询A、B字段返回的记录少。例如,当执行以下查询时,有许多C1和C2,但很少有c3。

从t中选择count(1) c1,其中A = 1;从t中选择count(1) c2,其中B = 2;从t中选择count(1) c3,其中A = 1,B = 2;联合指数一栏谁排第一?
流行的观点是,重复记录少的字段放在前面,重复记录多的字段放在后面。其实这个结论并不准确。

删除表t清除;将表t创建为select * from dba _ objects在t(object_id,object_type)上创建索引idx1 _ object _ id在t(object_type,object_id)上创建索引idx2 _ object _ id-等效查询:select * from其中object _ id = 20,object _ type = & # 39表& # 39;;select /*+ index(t,idx1_object_id) */ * from t其中object_id = 20,object _ type = & # 39表& # 39;;select /*+ index(t,idx2_object_id) */ * from t其中object_id = 20,object _ type = & # 39表& # 39;;结论:在等价查询的情况下,无论哪一列先来,组合索引的性能都是一样的。

-范围查询:select * from where object _ id >:= 20 and object _ id & lt;2000和object _ type = & # 39表& # 39;;select /*+ index(t,idx 1 _ object _ id)*/* from t where object _ id & gt;=20和object _ id & lt2000和object _ type = & # 39表& # 39;;select /*+ index(t,id x2 _ object _ id)*/* from t where object _ id & gt;=20和object _ id & lt2000和object _ type = & # 39表& # 39;;结论:对于复合索引的列,等效查询列在前面,范围查询列在后面。但是,如果要确定实际生产环境中组合索引列中谁先出现,就要综合考虑所有常用的SQL索引,因为索引太多会影响入库性能。

1.3指数的危害

表上的索引太多会严重影响插入性能;

对delete操作,删除少量数据索引可以有效快速定位,提升删除效率,但是如果删除大量数据就会有负面影响;对update操作类似delete,而且如果更新的是非索引列则无影响。

1.4指数监测

-monitoring alter index[index _ name]监视使用情况;select * from v$object _ usage;-取消监视:alter index[index _ name]no monitoring用法;根据索引监控的结果,可以考虑删除长期不用的索引。

1.5指标的通用执行计划

索引全扫描:索引全扫描、单块读取、有序
索引范围扫描
索引快速全扫描:索引快速全扫描、多块读取、乱序
索引全扫描(MIN/MAX):对于MAX(),MIN()函数的查询
索引跳过扫描:查询条件不使用组合索引的第一列,但在组合索引的第一列有高重复时可以使用。

二、位图索引

应用场景:更新操作少,重复度高的栏目。

优点:计数效率高(*)

将表t( name_id,gender not null,location not null,age_range not null,data)创建为select rownum,decode(floor(DBMS _ random . value(0,2)),0,& # 39;M & # 39,1,'F & # 39)性别,ceil(dbms_random.value(0,50))位置,decode(floor(DBMS _ random . value(0,4)),0,& # 39;子& # 39;,1,'年轻& # 39;,2,'中间& # 39;,3,'老& # 39;)age_range,rpad(& # 39;*',20,'*')rownum & lt= 100000;在t(性别,位置,年龄范围)上创建索引idx _ t;在t(性别)上创建位图索引gender _ idx在t(location)上创建位图索引location _ idx在t(age_range)上创建位图索引age _ range _ idxselect * from t其中性别= & # 39;M & # 39以及(1,10,30)中的位置和age _ range = & # 39子& # 39;;select /*+ index(t,idx_t) */* from t其中gender = & # 39M & # 39以及(1,10,30)中的位置和age _ range = & # 39子& # 39;;三、函数索引的应用场景:某一列要进行函数运算的场景。

功能索引的效率低于普通索引。

在oracle中创建函数索引意味着为您使用的任何函数创建一个函数索引,比如substr。

select * from table其中1=1,substr(field,0,2)in(& # 39;01')

创建索引的语句是

在表(substr(fileld,0,2))上创建索引index name online no logging;

觉得有用的朋友帮忙转发一下吧!后面会分享更多关于devops和DBA的内容,感兴趣的朋友可以关注一下~

数据库索引类型(mysql有几种索引类型)插图(1)

免责声明:本站所有文章内容,图片,视频等均是来源于用户投稿和互联网及文摘转载整编而成,不代表本站观点,不承担相关法律责任。其著作权各归其原作者或其出版社所有。如发现本站有涉嫌抄袭侵权/违法违规的内容,侵犯到您的权益,请在线联系站长,一经查实,本站将立刻删除。

作者:美站资讯,如若转载,请注明出处:https://www.meizw.com/n/60047.html

发表回复

登录后才能评论