这两种写法哪种效率高?

vincege 2003-11-21 04:57:37
方法1
select table1.field1,table2.field2
from table1 inner join table2 on ...
方法2
select field1,fn_getfield2(...)
from table1
其中fn_getfield2是一个取得table2.field2的自定义函数。其中使用了cursor
...全文
24 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
cgsun 2003-11-21
  • 打赏
  • 举报
回复
oracle
leecooper0918 2003-11-21
  • 打赏
  • 举报
回复

楼上写的不错,可楼主问的问题是 关于MS SQL的吧?
atlasGS 2003-11-21
  • 打赏
  • 举报
回复
很多时候,我们不太清楚自己写的SQL语句好还是不好,往往数据量一大,程序运行变慢。其

实在SQL/PLUS里可以很清晰的分析出SQL语句的执行计划,它可以提醒我们来创建索引或改变

SQL语句的写法。



先在sys用户下运行@/ORACLE_HOME/rdbms/sqlplus/admin/plustrce.sql



内容:

set echo on

drop role plustrace;

create role plustrace;

grant select on v_$sesstat to plustrace;

grant select on v_$statname to plustrace;

grant select on v_$session to plustrace;

grant plustrace to dba with admin option;

set echo off



产生plustrace角色,然后在sys用户下把此角色赋予一般用户



SQL> grant plustrace to &username;



先找到/ORACLE_HOME/rdbms/admin/utlxplan.sql,然后在当前用户SQL>下运行,它创建一

个plan_table,用来存储分析SQL语句的结果。



create table PLAN_TABLE (

statement_id varchar2(30),

timestamp date,

remarks varchar2(80),

operation varchar2(30),

options varchar2(30),

object_node varchar2(128),

object_owner varchar2(30),

object_name varchar2(30),

object_instance numeric,

object_type varchar2(30),

optimizer varchar2(255),

search_columns number,

id numeric,

parent_id numeric,

position numeric,

cost numeric,

cardinality numeric,

bytes numeric,

other_tag varchar2(255),

partition_start varchar2(255),

partition_stop varchar2(255),

partition_id numeric,

other long,

distribution varchar2(30));



在SQL/PLUS的窗口运行以下命令





set time on; (说明:打开时间显示)

set autotrace on; (说明:打开自动分析统计,并显示SQL语句的运行结果)

set autotrace traceonly; (说明:打开自动分析统计,不显示SQL语句的运行结果)



接下来你就运行测试SQL语句,看到其分析统计结果了。一般来讲,我们的SQL语句应该避免

对大表的全表扫描。



关闭以上功能,在SQL/PLUS的窗口运行以下命令



set time off; (说明:关闭时间显示)

set autotrace off; (说明:关闭自动分析统计)





rocllllll 2003-11-21
  • 打赏
  • 举报
回复
第一种,当数据量大了以后,你就会生客的体会到
为什么?不光是他,还有临时表等,同等货色
要知道我客户的数据库服务器是1G内存还不行
vincege 2003-11-21
  • 打赏
  • 举报
回复
用第二中方法我可以用case,在不同的时候调用不同的函数从不同的表取数,
join 能否根据条件join不同的表?
txlicenhe 2003-11-21
  • 打赏
  • 举报
回复
听到第二种是游标的写法就不用想了,第一种效率高。
zjcxc 2003-11-21
  • 打赏
  • 举报
回复
用游标是严重影响速度.
hegt0 2003-11-21
  • 打赏
  • 举报
回复
一样高
zjcxc 2003-11-21
  • 打赏
  • 举报
回复
当然第一种.
pengdali 2003-11-21
  • 打赏
  • 举报
回复
select table1.field1,table2.field2
from table1 inner join table2 on ...

22,209

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server 疑难问题
社区管理员
  • 疑难问题社区
  • 尘觉
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧