LOGO OA教程 ERP教程 模切知识交流 PMS教程 CRM教程 开发文档 其他文档  
 
网站管理员

[点晴永久免费OA]SQL:Like 的优化

admin
2011年2月28日 11:34 本文热度 8769
1。尽量不要使用 like '%..%'

2。对于 like '..%..' (不以 % 开头),Oracle可以应用 colunm上的index


3。对于 like '%...' 的 (不以 % 结尾),可以利用reverse + function index 的形式,变化成 like '..%'



代码:



-- '建测试表和Index,注意,重点在于带reverse的function index。同时,一定要使用CBO才行……



sys@mescp> select reverse('123') from dual;REVERSE('123')


--------------------------------


321



1 row selected.


sys@mescp> create table test_like as select object_id,object_name from dba_objects;


Table created.


sys@mescp> create index test_like__name on test_like(object_name);


Index created.


sys@mescp> create index test_like__name_reverse on test_like(reverse(object_name));


Index created.
sys@mescp> analyze table test_like compute statistics for table for all indexes;


Table analyzed.


sys@mescp> set autotrace trace exp





-- '常量开头的like , 会利用index ,没问题…… '


sys@mescp> select * from test_like where object_name like AS%';



Execution Plan


----------------------------------------------------------


0 SELECT STATEMENT Optimizer=CHOOSE (Cost=2 Card=655 Bytes=15720)


1 0 TABLE ACCESS (BY INDEX ROWID) OF 'TEST_LIKE' (Cost=2 Card=655Bytes=15720)


2 1 INDEX (RANGE SCAN) OF 'TEST_LIKE__NAME' (NON-UNIQUE) (Cost=2 Card=118)



--'开头和结尾都是 % ,对不起,很难优化'


sys@mescp> select * from test_like where object_name like '%%';



Execution Plan


----------------------------------------------------------


0 SELECT STATEMENT Optimizer=CHOOSE (Cost=6 Card=655 Bytes=15720)


1 0 TABLE ACCESS (FULL) OF 'TEST_LIKE' (Cost=6 Card=655 ytes=15720)



-- '以常量结束,直接写的时候是不能应用index的'


sys@mescp> select * from test_like where object_name like '%S';


Execution Plan


----------------------------------------------------------


0 SELECT STATEMENT Optimizer=CHOOSE (Cost=6 Card=655 Bytes=15720)


1 0 TABLE ACCESS (FULL) OF 'TEST_LIKE' (Cost=6 Card=655 Bytes=15720)



--'以常量结束的,加个reverse 函数,又可以用上index了'


sys@mescp> select * from test_like where reverse(object_name)like reverse('%AS');


Execution Plan


----------------------------------------------------------


0 SELECT STATEMENT Optimizer=CHOOSE (Cost=2 Card=655 Bytes=15720)


1 0 TABLE ACCESS (BY INDEX ROWID) OF 'TEST_LIKE' (Cost=2 Card=655 Bytes=15720)


2 1 INDEX (RANGE SCAN) OF 'TEST_LIKE__NAME_REVERSE' (NON-UNIQUE) (Cost=2 Card=118)


该文章在 2011/2/28 11:34:43 编辑过
关键字查询
相关文章
正在查询...
点晴ERP是一款针对中小制造业的专业生产管理软件系统,系统成熟度和易用性得到了国内大量中小企业的青睐。
点晴PMS码头管理系统主要针对港口码头集装箱与散货日常运作、调度、堆场、车队、财务费用、相关报表等业务管理,结合码头的业务特点,围绕调度、堆场作业而开发的。集技术的先进性、管理的有效性于一体,是物流码头及其他港口类企业的高效ERP管理信息系统。
点晴WMS仓储管理系统提供了货物产品管理,销售管理,采购管理,仓储管理,仓库管理,保质期管理,货位管理,库位管理,生产管理,WMS管理系统,标签打印,条形码,二维码管理,批号管理软件。
点晴免费OA是一款软件和通用服务都免费,不限功能、不限时间、不限用户的免费OA协同办公管理系统。
Copyright 2010-2024 ClickSun All Rights Reserved