where条件顺序不同、性能不同示例探讨

2022-05-24 0 896

昨天在书上看到SQL语句优化时,where条件顺序不同,性能不同,这个建议在Oracle11G版本还合适吗?方式1优于方式2?

方式1:


复制代码 代码如下:

select a.*

from students s,

class c

where

s.id = c.id

s.id = ‘xxxxxxxx’

方式2:


复制代码 代码如下:

select a.*

from students s,

class c

where

s.id = ‘xxxxxxxx’

s.id = c.id

10g中测试结果证明是一样的。

Microsoft Windows [版本 5.2.3790]

(C) 版权所有 1985-2003 Microsoft Corp.

C:\Documents and Settings\Administrator>sqlplus / as sysdba

SQL*Plus: Release 10.2.0.1.0 – Production on 星期六 5月 11 17:48:55 2013

Copyright (c) 1982, 2005, Oracle. All rights reserved.

连接到:

Oracle Database 10g Enterprise Edition Release 10.2.0.1.0 – Production

With the Partitioning, OLAP and Data Mining options

SQL> alter system flush shared_pool;

系统已更改。

SQL> alter system flush buffer_cache;

系统已更改。

SQL> set autotrace on;

SQL> select *

2 from COUNTRIES c,

3 REGIONS r

4 where c.REGION_ID=r.REGION_ID and c.REGION_ID=’4′;

REGIONS r

*

第 3 行出现错误:

ORA-00942: 表或视图不存在

SQL> select *

2 from hr.COUNTRIES c,

3 hr. REGIONS r

4 where c.REGION_ID=r.REGION_ID and c.REGION_ID=’4′;

CO COUNTRY_NAME REGION_ID REGION_ID

— —————————————- ———- ———-

REGION_NAME

————————-

EG Egypt 4 4

Middle East and Africa

IL Israel 4 4

Middle East and Africa

KW Kuwait 4 4

Middle East and Africa

CO COUNTRY_NAME REGION_ID REGION_ID

— —————————————- ———- ———-

REGION_NAME

————————-

NG Nigeria 4 4

Middle East and Africa

ZM Zambia 4 4

Middle East and Africa

ZW Zimbabwe 4 4

Middle East and Africa

已选择6行。

执行计划

———————————————————-

Plan hash value: 4030513296

——————————————————————————–

—————-

| Id | Operation | Name | Rows | Bytes | Cost (%

CPU)| Time |

——————————————————————————–

—————-

| 0 | SELECT STATEMENT | | 6 | 168 | 2

(0)| 00:00:01 |

| 1 | NESTED LOOPS | | 6 | 168 | 2

(0)| 00:00:01 |

| 2 | TABLE ACCESS BY INDEX ROWID| REGIONS | 1 | 14 | 1

(0)| 00:00:01 |

|* 3 | INDEX UNIQUE SCAN | REG_ID_PK | 1 | | 0

(0)| 00:00:01 |

|* 4 | INDEX FULL SCAN | COUNTRY_C_ID_PK | 6 | 84 | 1

(0)| 00:00:01 |

——————————————————————————–

—————-

Predicate Information (identified by operation id):

—————————————————

3 – access(“R”.”REGION_ID”=4)

4 – filter(“C”.”REGION_ID”=4)

统计信息

———————————————————-

628 recursive calls

0 db block gets

127 consistent gets

20 physical reads

0 redo size

825 bytes sent via SQL*Net to client

385 bytes received via SQL*Net from client

2 SQL*Net roundtrips to/from client

13 sorts (memory)

0 sorts (disk)

6 rows processed

SQL>

#############

SQL> alter system flush shared_pool;

系统已更改。

SQL> alter system flush buffer_cache;

系统已更改。

select *

from hr.COUNTRIES c,

hr. REGIONS r

where

c.REGION_ID=’4′

6 and c.REGION_ID=r.REGION_ID;

CO COUNTRY_NAME REGION_ID REGION_ID

— —————————————- ———- ———-

REGION_NAME

————————-

EG Egypt 4 4

Middle East and Africa

IL Israel 4 4

Middle East and Africa

KW Kuwait 4 4

Middle East and Africa

CO COUNTRY_NAME REGION_ID REGION_ID

— —————————————- ———- ———-

REGION_NAME

————————-

NG Nigeria 4 4

Middle East and Africa

ZM Zambia 4 4

Middle East and Africa

ZW Zimbabwe 4 4

Middle East and Africa

已选择6行。

执行计划

———————————————————-

Plan hash value: 4030513296

——————————————————————————–

—————-

| Id | Operation | Name | Rows | Bytes | Cost (%

CPU)| Time |

——————————————————————————–

—————-

| 0 | SELECT STATEMENT | | 6 | 168 | 2

(0)| 00:00:01 |

| 1 | NESTED LOOPS | | 6 | 168 | 2

(0)| 00:00:01 |

| 2 | TABLE ACCESS BY INDEX ROWID| REGIONS | 1 | 14 | 1

(0)| 00:00:01 |

|* 3 | INDEX UNIQUE SCAN | REG_ID_PK | 1 | | 0

(0)| 00:00:01 |

|* 4 | INDEX FULL SCAN | COUNTRY_C_ID_PK | 6 | 84 | 1

(0)| 00:00:01 |

——————————————————————————–

—————-

Predicate Information (identified by operation id):

—————————————————

3 – access(“R”.”REGION_ID”=4)

4 – filter(“C”.”REGION_ID”=4)

统计信息

———————————————————-

656 recursive calls

0 db block gets

131 consistent gets

22 physical reads

0 redo size

825 bytes sent via SQL*Net to client

385 bytes received via SQL*Net from client

2 SQL*Net roundtrips to/from client

13 sorts (memory)

0 sorts (disk)

6 rows processed

SQL>

免责声明:
1、本网站所有发布的源码、软件和资料均为收集各大资源网站整理而来;仅限用于学习和研究目的,您必须在下载后的24个小时之内,从您的电脑中彻底删除上述内容。 不得使用于非法商业用途,不得违反国家法律。否则后果自负!

2、本站信息来自网络,版权争议与本站无关。一切关于该资源商业行为与www.niceym.com无关。
如果您喜欢该程序,请支持正版源码、软件,购买注册,得到更好的正版服务。
如有侵犯你版权的,请邮件与我们联系处理(邮箱:skknet@qq.com),本站将立即改正。

NICE源码网 MsSql where条件顺序不同、性能不同示例探讨 https://www.niceym.com/61468.html