首页 > 数据库 > 数据库开发技术 > 通用SQL优化经典等价改写【五】——避免函数调用
往期回顾:
-- 删除原有的测试表
drop table people purge;
drop table sex purge;
-- 创建people表
create table people (first_name varchar2(200),last_name varchar2(200),sex_id number);
-- 创建sex表
create table sex (name varchar2(20), sex_id number);
-- 向people表插入数据
insert into people (first_name,last_name,sex_id) select object_name,object_type,1 from dba_objects;
-- 向sex表插入数据
insert into sex (name,sex_id) values ('男',1);
insert into sex (name,sex_id) values ('女',2);
insert into sex (name,sex_id) values ('不详',3);
-- 提交事务
commit;
-- 创建函数get_sex_name
create or replace function get_sex_name(p_id sex.sex_id%type) return sex.name%type is
v_name sex.name%type;
begin
select name
into v_name
from sex
where sex_id=p_id;
return v_name;
end;
/
select sex_id, first_name||' '||last_name full_name, get_sex_name(sex_id) gender from people;
select p.sex_id, p.first_name||' '||p.last_name full_name, sex.name from people p, sex where sex.sex_id=p.sex_id;
set autotrace traceonly statistics select sex_id, first_name||' '||last_name full_name, get_sex_name(sex_id) gender from people;
统计信息 -------- 111120 recursive calls 0 db block gets 785917 consistent gets 0 physical reads 0 redo size 3974937 bytes sent via SQL*Net to client 81893 bytes received via SQL*Net from client 7409 SQL*Net roundtrips to/from client 0 sorts (memory) 0 sorts (disk) 111120 rows processed
select p.sex_id, p.first_name||' '||p.last_name full_name, sex.name from people p, sex where sex.sex_id=p.sex_id;
统计信息 -------- 0 recursive calls 0 db block gets 8084 consistent gets 0 physical reads 0 redo size 3974935 bytes sent via SQL*Net to client 81893 bytes received via SQL*Net from client 7409 SQL*Net roundtrips to/from client 0 sorts (memory) 0 sorts (disk) 111120 rows processed
来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/9091385/viewspace-3083107/ ,如需转载,请注明出处,否则将追究法律责任。