这篇文章主要介绍SQL优化之如何使用索引,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!

下面sql30秒执行出结果,查看sql谓词中有like,我们知道谓词中有这样的语句是不走索引的(为了保护客户的隐私,表名和部分列已经重命名)。

1

2

3

4

5

6

7

8

9

10

11

12

13

14

SELECT/*+1*/

CHECKNUMASPINGZBSM,

CHECKDATE,

XXXMODE,

XXXRESULT,

(SELECTRESULT

FROM(selectID,to_char(WMSYS.WM_CONCAT(xxxnum||xxxtype||xxxmode||xxxresult))RESULT

fromOOOO_XXXCHECKLOG

WHERECHECKDATEBETWEENDATE'2018-05-04'ANDDATE'2018-05-04'andxxxtypelike'%PAR'

GROUPBYID

)bwhereb.id=a.id

)RESULT,

CLERKNUMASCHECKNUM

FROMOOO_XXXECHECKLOGA;


逻辑读600多万。查看索引情况如下

表过滤返回数据量如下:

1

2

3

4

5

6

SQL>selectcount(*)fromOOOO_XXXCHECKLOG;

2799616

selectcount(*)fromOOOO_XXXCHECKLOGWHERECHECKDATEBETWEENDATE'2018-05-04'ANDDATE'2018-05-04'andxxxtypelike'%PAR';

12856

selectcount(*)fromOOOO_XXXCHECKLOGWHERECHECKDATEBETWEENDATE'2018-05-04'ANDDATE'2018-05-04';

197984

通过查询上面返回数据可知,因为xxxtype不走索引,所以通过索引要回表197984次,如果走了索引只回表12856次。

下面我们建立REVERSE索引IDX_ID_TYPE_RE

1

2

3

4

5

6

7

8

9

10

11

12

13

14

SELECT/*+OOOO_XXXCHECKLOGindex(IDX_ID_TYPE_RE)2*/

CHECKNUMASPINGZBSM,

CHECKDATE,

XXXMODE,

XXXRESULT,

(SELECTRESULT

FROM(selectID,to_char(WMSYS.WM_CONCAT(xxxnum||xxxtype||xxxmode||xxxresult))RESULT

fromOOOO_XXXCHECKLOG

WHERECHECKDATEBETWEENDATE'2018-05-04'ANDDATE'2018-05-04'andREVERSE(xxxtype)like'RAP%'

GROUPBYID

)bwhereb.id=a.id

)RESULT,

CLERKNUMASCHECKNUM

FROMOOO_XXXECHECKLOGA;

查看执行计划如下,逻辑读将为300万,但是时间还是维持在18秒,根本原因在于这个索引因为标量子查询的问题被访问700万次导致。

下面我们改写sql如下

1

2

3

4

5

6

7

8

9

10

11

12

13

SELECT/*+index(OOOO_XXXCHECKLOGIDX_ID_TYPE_RE)3*/

CHECKNUMASPINGZBSM,

CHECKDATE,

XXXMODE,

XXXRESULT,

B.RESULT,

CLERKNUMASCHECKNUM

FROMOOO_XXXECHECKLOGA

leftjoin(selectID,to_char(WMSYS.WM_CONCAT(xxxnum||xxxtype||xxxmode||xxxresult))RESULT

fromOOOO_XXXCHECKLOG

WHERECHECKDATEBETWEENDATE'2018-05-04'ANDDATE'2018-05-04'andREVERSE(xxxtype)like'RAP%'

GROUPBYID

)bonb.id=a.id;


执行计划中出现index_skip_scan。

下面我们创建如下索引:

1

createindexidx_date_seal_reonOOOO_XXXCHECKLOG(CHECKDATE,REVERSE(xxxtype));

可以看到,逻辑读降到64424,50个物理读是因为刚刚创建索引的原因,sql也秒出。

以上是“SQL优化之如何使用索引”这篇文章的所有内容,感谢各位的阅读!希望分享的内容对大家有帮助,更多相关知识,欢迎关注亿速云行业资讯频道!