oracle 数据库如何建立索引 如何用索引?
我现在有一个SQL语句
SELECT FAQID,
FAQNAME,
TYPE,
CREATOR,
TOQUESTION,
SUPERCODE
FROM T_KBS_FAQ t
where TYPE = '1'
<[AND FAQID = :faqId]>
<[AND FAQNAME like '%' ||:faqName || '%']>
<[AND CREATOR = :creator]>
<[AND SUPERCODE=:superCode]>
<[AND TOQUESTION=:toQuestion]>
<%:toKngType%>
现在数据过大 导致查询很慢,如何优化? 要建立几个字段建立索引怎么样建立, 建立好了如何使用 SQL语句又该怎写?
-------------------------------------------------------------------------------------------------------------------------------------------------
name | id | rowid | rowid | id | ||
王一 | 1 | x001 | x001 | 1 | ||
王二 | 2 | x002 | x002 | 2 | ||
王三 | 3 | x003 | x003 | 3 | ||
表 | 索引 | |||||
select * from 表 where id = 3 索引是由where条件触发的 ,此查询语句中指定id=3,因为有索引直接从索引段中找到id=3对应的rowid,然后就可以快速用rowid快速找到表中的记录,如果没有索引,就是一行一行的查找id=3的记录 |
下面写几种常见索引的创建吧:
(1) create index 索引名 on 表(字段名); //创建B树索引,一般用的OLTP中
(2) create bitmap index 索引名 on 表(字段名); //创建位图索引,一般用的OLAP中
(3) create index 索引名 on 表名 (substr(字段,1,10))
//创建函数索引,有些时候呢,咱们的搜索条件要加上函数,这种情况呢,普通索引就不能解发了,就要创建函数索引
(4) create index 索引名 on 表名 (字段1,字段2......字段n);
//复合索引,当条件中,经常去查询多个条件时,可以把多个条件放在一个索引中
(5) create index 索引名 on 表(字段 desc); //排序后创建索引
(6) create index 索引名 on 表名 (字段) reverse; //反转索引,消除热点块
(7) create index 索引名 on 表名(字段) local; //创建分区本地索引
(8) create index 索引名 on 表名 (字段) global; //创建分区全局索引
扩展资料:
1、如果有两个或者以上的索引,其中有一个唯一性索引,而其他是非唯一,这种情况下oracle将使用唯一性索引而完全忽略非唯一性索引
2、至少要包含组合索引的第一列(即如果索引建立在多个列上,只有它的第一个列被where子句引用时,优化器才会使用该索引)
3、小表不要简历索引
4、对于基数大的列适合建立B树索引,对于基数小的列适合简历位图索引
5、列中有很多空值,但经常查询该列上非空记录时应该建立索引
6、经常进行连接查询的列应该创建索引
7、使用create index时要将最常查询的列放在最前面
8、LONG(可变长字符串数据,最长2G)和LONG RAW(可变长二进制数据,最长2G)列不能创建索引
9、限制表中索引的数量(创建索引耗费时间,并且随数据量的增大而增大;索引会占用物理空间;当对表中的数据进行增加、删除和修改的时候,索引也要动态的维护,降低了数据的维护速度)
附加维护索引基本操作手段:
查看指定表上现有索引详情
select t.INDEX_NAME,t.COLUMN_NAME,i.index_type from user_ind_columns t,user_indexes i where t.index_name = i.index_name and t.table_name='表名';
查看索引及列
select t.index_name,t.status from user_indexes t where t.INDEX_NAME in ();
查看指定分区表的所有索引
select t.INDEX_NAME,t.COLUMN_NAME,i.index_type from
user_ind_columns t,user_indexes i where t.index_name = i.index_name and
t.table_name='表名';
查询分区索引状态
select PARTITION_NAME,STATUS from DBA_IND_PARTITIONS where INDEX_NAME='';
valid:当前索引有效
N/A :分区索引 有效
unusable:索引失效
重新建立索引
ALTER INDEX 用户.索引 REBUILD;
oracle 数据库如何建立索引 如何用索引?相关推荐
- oracle数据库分区表建立索引
分区表和一般表一样可以建立索引,分区表可以创建局部索引和全局索引.当分区中出现许多事务并且要保证所有分区中的数据记录的唯一性时采用全局索引. 1. 局部索引分区的建立:create ind ...
- oracle数据库(表、视图、索引、事务)
1.视图与表的区别 1) 表需要占用磁盘空间,视图不用,视图作为数据对象存储在oracle中. 2) 视图不能添加索引,查询视图效率会比添加索引的表慢一点点 3) 视图可以简化复杂查询 4) 视图利于 ...
- 怎样在一个Oracle数据库中建立多个实例
前言:前两天,在接触一个新项目,他们的数据库框架,在一台机器上,当时别人交代是一个数据库两个实例(当前举例a,b),我看了看交接文档,那明明是一台机器,不是单机数据库吗?怎么有两个实例?登录相应的环境 ...
- weblogic oracle连接池配置文件,关于WebLogic 访问Oracle 数据库(建立连接池)问题...
我在使用WebLogic Server 控制台配置Oracle 数据库连接池,没有成功求助 各位大侠指点一二. 配置信息: URL:jdbc:oracle:thin:@TEST:1521:oral D ...
- Oracle数据库解决NULL值不走B树索引
B树索引我们可以把它看成是书的目录,在这个目录中主要记录的是索引所对应的表列的值和这个值所对应的ROWID.在通常情况下,我们在表中增加索引的目的是增加表的查询性能,但是有几种情况,即使你在表中加入了 ...
- oracle不适合建立索引的场景,Oracle 分区表中本地索引和全局索引的适用场景
背景 分区表创建好了之后,如果需要最大化分区表的性能就需要结合索引的使用,分区表有两种索引:本地索引和全局索引.既然存在着两种的索引类型,相信存在即合理.既然存在就会有存在的原因,也就是在特定的场景中 ...
- ORACLE数据库数据类型
Oracle的数据类型 Oracle的数据类型分为标量(Scalar)类型.复合(Composite)类型.引用(Reference)类型和LOB(Large Object)类型4种类型. 因为标量类 ...
- 一起ORACLE数据库中数据查询结果不一致问题的排查过程
一.问题描述 在某软件开发项目中,需要在ORACLE数据库中建立十张类型相同的员工信息表tb_employeeinfo0~tb_employeeinfo9,并建立向这十张表中插入数据的存储过程.ORA ...
- oracle数据库之数据导入问题
2019独角兽企业重金招聘Python工程师标准>>> 在oracle数据库中建立好数据库以后,需要使用PLSQL进行用户创建,打开PLSQL,使用时需要使用最高权限进入PLSQL. ...
最新文章
- mysql 大事务 binlog_执行大事务时出现binlog解析失败
- C 语言 链表的创建与打印
- Java中单链表的实现
- 高斯混合模型GMM的理解
- 如何优雅的追到女神夕小瑶
- lambda表达式 java 效率_Java8新特性效率之Lambda
- r语言plot函数设置y轴的范围及刻度_R语言之简单绘图
- 这个小伙因WannaCry勒索软件一夜成名,获得一年免费披萨
- mysql在linux下备份还原,Linux下MySQL的备份与还原
- windows核心编程之进程(3)
- 数学思维游戏两则:Gabriel喇叭、世界末日论
- 计算机学科融合信息技术,信息技术与学科教学融合课例解析
- 非计算机专业考研软件工程,#考研报名#计算机类、软件工程类考生报名前必看...
- 普通话测试软件字体怎么调整,普通话测试方案
- cv :: cvtColor
- 关于将Tesorflow的SavedModel模型转换成tflite模型
- SSM_JSON格式增删改查
- txt文本去重复 亲测50G文本高效去重复
- [Android系统开发]Launcher Hotseat图标居中排列
- 导航栏保持居中并使用swiper作为轮播图进行背景轮播背景