性能问答>Oracle数据库创建索引时该怎么选择索引?>
1回复
3年前

Oracle数据库创建索引时该怎么选择索引?



请大家帮忙分析一下下面这种情况,Oracle数据库应该怎么创建索引。我们使用的Oracle版本为:Oracle Database 11g Enterprise Edition Release 11.2.0.4.0 - 64bit Production。

我们有一张表TABLE_DATA,表结构如下:

create table TABLE_DATA
(
  c_id                    VARCHAR2(32) not null,
  c_order_no              VARCHAR2(50),
  c_real_order_no         VARCHAR2(30),
  col_1                   VARCHAR2(30),
  col_2                   CHAR(1),
  t_crt_tm                DATE,
  t_upd_tm                DATE,
  c_suc_mrk               CHAR(1),
  n_sum_cyc               NUMBER,
  col_2                   VARCHAR2(50),
  col_2                   VARCHAR2(1000),
  col_2                   VARCHAR2(1000),
  c_plat_typ              VARCHAR2(6),
  col_2                   VARCHAR2(10),
  col_2                   VARCHAR2(50),
  col_2                   VARCHAR2(50),
  col_2                   VARCHAR2(50),
  col_2                   VARCHAR2(10),
  col_2                   VARCHAR2(2000),
  col_2                   VARCHAR2(200),
  col_2                   VARCHAR2(200),
  col_2                   VARCHAR2(20),
  c_sms_mrk               VARCHAR2(1),
  col_2                   VARCHAR2(1),
  col_2                   VARCHAR2(1),
  col_3                   VARCHAR2(2)
)

这张表现在有10903027条数据,这张表目前只有c_id ,c_order_no ,c_real_order_no 这三个列有创建索引,都是普通索引index。

其中c_plat_typ这一列的值是枚举值,c_plat_typ的值大概有20种不同的值,也有可能有空值。

C_SUC_MRK这一列的值也是枚举值,C_SUC_MRK的值有5种不同的值,也有可能有空值。

问题是:

1、我们查询的时候经常会用c_plat_typ和C_SUC_MRK作为WHERE条件进行查询,并且查询速度较慢。

下面这个SQL查出来627条数据,花了3秒钟,我感觉太慢了。

SELECT c_order_no , c_real_order_no , C_PLAT_TYP
FROM TABLE_DATA
WHERE C_PLAT_TYP = ‘ATYPE’
AND C_SUC_MRK =‘0’;

下面这个SQL查出来9条数据,花了5.2秒钟,我感觉太慢了。

SELECT c_order_no, c_real_order_no, C_PLAT_TYP

FROM (SELECT c_order_no, c_real_order_no, C_PLAT_TYP,
FROM TABLE_DATA s1
WHERE C_PLAT_TYP = ‘GJEPDF’
AND C_SUC_MRK IN (‘0’)
AND EXISTS (SELECT s2.c_order_no
FROM TABLE_DATA s2
WHERE s2.C_PLAT_TYP = ‘GJSPDF’
AND s2.C_SUC_MRK = ‘S’
AND s1.c_order_no= s2.c_order_no)
ORDER BY T_CRT_TM DESC)
WHERE rownum < 1000

问:根据我们表的情况要优化上面俩个SQL,c_plat_typ和C_SUC_MRK这俩个列是否适合建立索引。适合建什么索引?

如果要建索引,应该建普通的index索引呢还是bitmap位图索引

3227 阅读
请先登录,查看1条精彩评论吧
快去登录吧,你将获得
  • 浏览更多精彩评论
  • 和开发者讨论交流,共同进步