首页 > 数据库 >Oracle问题:一张表推荐创建多少索引合适

Oracle问题:一张表推荐创建多少索引合适

时间:2023-07-28 14:34:41浏览次数:37  
标签:obj PREDS dba preds sys 索引 创建 Oracle

 

Oracle问题:一张表推荐创建多少索引合适

 

明确索引主要影响insert、delete以及索引字段的update情况下(还会占用空间,一般不考虑这点),结合需求:

1.如果表基本静态,存储足够的情况下想建多少个都可以。

2.字段如果null值占比大,对字段等值查询或者关联查询多也可以考虑,因为null不会去维护索引,创建的索引也会很小。

3.针对某个业务特别重要需要保障涉及SQL运行快,在其他手段无法生效下只能创建索引,权衡影响DML和优先保障业务下,那么只能创建索引。

4.如果表存在大量DML,但是DML效率高低都可接受,同1。

最后,一般是否需要创建索引除了以上4点,还会考虑字段的数据倾斜度,字段在业务上的使用频率。

另外表是否为分区表也可以考虑进行(全局索引和本地索引)。

对于时间字段,需要考虑业务上对该字段的使用"between and"(或(>=…<=))的范围,跨度大有索引也不一定能用上等等等等。

 

其中,对于表DML的频率,可以参考dba_tab_modifications,只是个大概的一个趋势。

09:40:19 SYS@test(2099)> select * from dba_tab_modifications where rownum<=10;

TABLE_OWNER  TABLE_NAME             PARTITION_NAME     SUBPARTITION_NAME       INSERTS    UPDATES    DELETES TIMESTAMP           TRUNCATED DROP_SEGMENTS
------------ ---------------------- ------------------ -------------------- ---------- ---------- ---------- ------------------- --------- -------------
SYS          JAVA$MC$                                                                6          2          0 2021-07-16 00:19:04 NO                    0
SYS          JOB$                                                                  110    1288930         64 2023-07-28 04:00:00 NO                    0
SYS          KET$_AUTOTASK_STATUS                                                    0       3015          0 2023-07-28 02:15:36 NO                    0
SYS          KOTAD$                                                                  1          0          1 2020-12-16 16:21:55 NO                    0
SYS          KOTTB$                                                                  1          0          1 2020-12-16 16:21:55 NO                    0
SYS          KOTTBX$                                                                 1          0          1 2020-12-16 16:21:55 NO                    0
SYS          KOTTD$                                                                  1          0          1 2020-12-16 16:21:55 NO                    0
SYS          SOURCE$                                                             79657          0      69269 2023-07-27 08:55:12 NO                    0
SYS          SQL$                                                                 2415          0       2398 2023-07-28 00:05:24 NO                    0
SYS          SQL$TEXT                                                               39          0         22 2023-07-13 09:10:18 NO                    0

10 rows selected.

Elapsed: 00:00:00.05

 

 

查看表的字段的使用频率,跟据官方文档Column Usage in Multi Column Index (文档 ID 400214.1)可以使用sys创建视图如下和同义词,当然也只是大概的一个趋势:

create view dba_column_usage
as
select oo.name owner,
o.name,
c.name column_name,
u.equality_preds,
u.equijoin_preds,
u.nonequijoin_preds,
u.range_preds,
u.like_preds,
u.null_preds,
u.timestamp
from sys.col_usage$ u,
sys.obj$ o,
sys.user$ oo,
sys.col$ c
where o.obj# = u.obj#
and oo.user# = o.owner#
and c.obj# = u.obj#
and c.intcol# = u.intcol#;

create public synonym dba_column_usage for dba_column_usage;

 

效果:

EQUALITY_PREDS表示等值查询

EQUIJOIN_PREDS表示关联等值查询,NONEQUIJOIN_PREDS反之

RANGE_PREDS表示范围查询过滤

LIKE_PREDS表示LIKE查询过滤

NULL_PREDS表示null判断过滤

 

标签:obj,PREDS,dba,preds,sys,索引,创建,Oracle
From: https://www.cnblogs.com/PiscesCanon/p/17587498.html

相关文章

  • Unity 创建自定义包
    1.包的类型(1)嵌入式包(包文件夹在项目文件夹下,在其下的Packages子文件夹中)(2)本地包  (包文件夹在项目文件夹外,路径不固定)2.创建“本地包”的步骤官方文档: 创建自定义包文件示例1:package.json文件,如下图所示:{"name":"com.example.di......
  • Mysql高级4-索引的使用规则
    一、最左前缀法则如果索引了多列(联合索引),要遵守最左前缀法则。最左前缀法则指的是查询从索引的最左列开始,并且不跳过索引中的列,如果跳跃某一列,索引将部分失效(后面的字段索引失效)示例1:account_transaction表中创建一个联合索引,使用method字段+trader_staff_id字段+operat......
  • Exadata磁盘损坏导致磁盘组无法mount恢复(oracle一体机磁盘组异常恢复)---惜分飞
    联系:手机/微信(+8617813235971)QQ(107644445)标题:Exadata磁盘损坏导致磁盘组无法mount恢复(oracle一体机磁盘组异常恢复)作者:惜分飞©版权所有[未经本人同意,不得以任何形式转载,否则有进一步追究法律责任的权利.]OracleExadata客户,在换盘过程中,cell节点又一块磁盘损坏,导致......
  • oracle数据库中的%type 及%rowtype
    1%TYPE说明为了使一个变量的数据类型与另一个已经定义了的变量(尤其是表的某一列)的数据类型相一致,Oracle提供了%TYPE定义方式。当被参照的那个变量的数据类型改变了之后,这个新定义的变量的数据类型会自动跟随其改变,容易保持一致,也不用修改PL/SQL程序了。当不能确切地知道被参照的......
  • ClickHouse创建分布式表1
    clickhouse集群主要有两个作用,一是数据副本,也就是将数据冗余到另外的机器上,用于保证高可用;二是分布表,就是将一个表的数据分散到多个节点上保存,然后再通过Distributed表引擎将数据拼接起来作为一个完整的表使用。创建分布式表:1.查看clickhouse默认的集群配置SELECT*from......
  • ClickHouse创建表
    创建本地表:CREATETABLEdefault.xxonclusterdefault(`id`Int64COMMENT'id',`plate_code`Nullable(String)COMMENT'板块编号',`plate_name`Nullable(String)COMMENT'板块名称',`date_time`Nullable(String)COMMENT�......
  • ClickHouse创建分布式表
     技术标签: 大数据开发  分布式  数据库  大数据  flink ClickHouse创建分布式表当数据量剧增的时候,clickhouse是采用分片的方式进行数据的存储的,类似于redis集群的实现方式。然后想进行统一的查询的时候,因为涉及到多个本地表,可以通过分布式表的方式来提供统一的......
  • AndroidAnnotations 使用在library项目中出现无法找到R文件下资源索引的错误
    AndroidAnnotations使用在library项目中出现无法找到R文件下资源索引的错误使用AndroidAnnotations(以下简称AA)已经有一段时间了,挺好用的,基本上完全可以满足Android开发需要,可以简化代码,所以现在在岗编写的所有的项目都是基于AA实现的。AA现在最新版本为3.2官方地址:http://android......
  • 65.oracle中查看缓存命中率
    DBBlockGets:请求的数据块在buffer能满足的个数当前模式块意思就是在操作中正好提取的块数目,而不是在一致性读的情况下而产生的块数。正常的情况下,一个查询提取的块是在查询开始的那个时间点上存在的数据块,当前块是在这个时刻存在的数据块,而不是在这个时间点之前或者之后的数据......
  • ubuntu 使用vsftpd 创建FTP服务(用户名密码登录,限制列出目录)
    vsftpd介绍ubuntu安装vsftpd配置vsftpd备份vsftpdconfig编辑vsftpdconfig创建登录用户添加vsftpd登录用户添加vsftpd登录用户对目录树的权限重启vsftpd服务验证ftp服务vsftpd介绍vsftpd是“verysecureFTPdaemon”的缩写,安全性是它的一个最大的特点。vsftpd是一个UNIX......