WHERE 1=1的性能疑问~

今天在网上看到这个文章  低效的“WHERE 1=1”     文章说:使用添加了“1=1”的过滤条件以后数据库系统就无法使用索引等查询优化策略,数据库系统将会被迫对每行数据进行扫描(也就是全表扫描)以比较此行是否满足过滤条件,当表中数据量比较大的时候查询速度会非常慢。因此如果数据检索对性能有比较高的要求就不要使用这种“简便”的方式。   

让我有点晕了 ,没觉得有什么问题啊 ·~~来跟大家讨论讨论·~~
参与21

20同行回答

drdb2drdb2系统工程师se
回复 10# mdkii nice input显示全部
回复 10# mdkii

nice input收起
互联网服务 · 2012-02-07
浏览838
mdkiimdkii软件开发工程师bocn
where 1=1 这类条件在 优化器在做 query rewrite 的时候会直接去掉的。不会对性能造成影响。Original Statement:------------------select * from t3 where 1 = 1Optimized Statement:-------------------SELECT Q1.C1 AS "C1" FROM DB2INST2.T3 AS Q1...显示全部
where 1=1 这类条件在 优化器在做 query rewrite 的时候会直接去掉的。不会对性能造成影响。

Original Statement:
------------------
select *
from t3
where 1 = 1


Optimized Statement:
-------------------
SELECT Q1.C1 AS "C1"
FROM DB2INST2.T3 AS Q1收起
银行 · 2012-02-06
浏览811
weiruan85weiruan85数据库管理员ibm
试验检验真理,以前是基于rbo的,现在时基于cbo 的。显示全部
试验检验真理,以前是基于rbo的,现在时基于cbo 的。收起
政府机关 · 2012-02-03
浏览781
qqdzyhqqdzyh数据库管理员苏宁电器
额~~~~应该是xxzmxx吧    我也测了几遍    根本不影响的~~~看来发表文章还得文采好 ·~不然会误导人·~~哎~~~显示全部
额~~~~应该是xxzmxx吧    我也测了几遍    根本不影响的~~~看来发表文章还得文采好 ·~不然会误导人·~~哎~~~收起
2012-02-03
浏览766
wp28556259wp28556259软件架构设计师CMBC
回复 5# qqdzyh     我后面也加了一些谓词,都不影响走索引的。。。不清楚那篇文章说的是极个别情况还是老版本的优化器还是WHAT。。。显示全部
回复 5# qqdzyh


    我后面也加了一些谓词,都不影响走索引的。。。不清楚那篇文章说的是极个别情况还是老版本的优化器还是WHAT。。。收起
银行 · 2012-02-03
浏览837
qqdzyhqqdzyh数据库管理员苏宁电器
我也觉得他这说的不对啊    是在想不通他影响性能影响在哪显示全部
我也觉得他这说的不对啊    是在想不通他影响性能影响在哪收起
2012-02-03
浏览754
qqdzyhqqdzyh数据库管理员苏宁电器
晕  我指有其他条件的时候·~~显示全部
晕  我指有其他条件的时候·~~收起
2012-02-03
浏览787
wp28556259wp28556259软件架构设计师CMBC
我做了一个测试db2expln -d ubtdb -g -q "select VISIT_ID   from DW_DPA.TSA_DPA_VISIT where 1=1" -t VISIT_ID是这个表的主键,这条搜索会走索引[db2inst1@dadw ~]$ db2expln -d ubtdb -g -q "select VISIT_ID   from DW_DPA.TSA_DPA_VISIT where 1...显示全部
我做了一个测试
db2expln -d ubtdb -g -q "select VISIT_ID   from DW_DPA.TSA_DPA_VISIT where 1=1" -t
VISIT_ID是这个表的主键,这条搜索会走索引
[db2inst1@dadw ~]$ db2expln -d ubtdb -g -q "select VISIT_ID   from DW_DPA.TSA_DPA_VISIT where 1=1" -t 

DB2 Universal Database Version 9.7, 5622-044 (c) Copyright IBM Corp. 1991, 2008
Licensed Material - Program Property of IBM
IBM DB2 Universal Database SQL and XQUERY Explain Tool

DB2 Universal Database Version 9.7, 5622-044 (c) Copyright IBM Corp. 1991, 2008
Licensed Material - Program Property of IBM
IBM DB2 Universal Database SQL and XQUERY Explain Tool

******************** DYNAMIC ***************************************

==================== STATEMENT ==========================================

        Isolation Level          = Cursor Stability
        Blocking                 = Block Unambiguous Cursors
        Query Optimization Class = 5

        Partition Parallel       = No
        Intra-Partition Parallel = No

        SQL Path                 = "SYSIBM", "SYSFUN", "SYSPROC", "SYSIBMADM", 
                                   "DB2INST1"


Statement:
  
  select VISIT_ID 
  from DW_DPA.TSA_DPA_VISIT 
  where 1=1


Section Code Page = 1208

Estimated Cost = 51293.703125
Estimated Cardinality = 8218489.000000

Access Table Name = DW_DPA.TSA_DPA_VISIT  ID = -6,-32754
|  Index Scan:  Name = SYSIBM.SQL110801091540160  ID = 1
|  |  Regular Index (Not Clustered)
|  |  Index Columns:
|  |  |  1: VISIT_ID (Ascending)
|  #Columns = 1
|  Data-Partitioned Table
|  Skip Inserted Rows
|  Avoid Locking Committed Data
|  Currently Committed for Cursor Stability
|  All data partitions will be accessed
|  #Key Columns = 0
|  |  Start Key: Beginning of Index
|  |  Stop Key: End of Index
|  Index-Only Access
|  Index Prefetch: Eligible 41763
|  Lock Intents
|  |  Table: Intent Share
|  |  Row  : Next Key Share
|  Sargable Index Predicate(s)
|  |  Return Data to Application
|  |  |  #Columns = 1
Return Data Completion

End of section


Optimizer Plan:

         Rows   
       Operator 
         (ID)   
         Cost   
                 
     8.21849e+06 
       RETURN    
        ( 1)     
       51293.7   
         |       
     8.21849e+06 
       IXSCAN    
        ( 2)     
       51293.7   
         |          
    8.21849e+06     
 Index:             
 SYSIBM             
 SQL110801091540160 
收起
银行 · 2012-02-03
浏览903
wp28556259wp28556259软件架构设计师CMBC
我也写过WHERE 1=1,但是具体场景我想不起来了。你说的是WHERE后面有这个谓词还是包含这个谓词?如果只有这一个条件,是要全表扫描呀显示全部
我也写过WHERE 1=1,但是具体场景我想不起来了。你说的是WHERE后面有这个谓词还是包含这个谓词?如果只有这一个条件,是要全表扫描呀收起
银行 · 2012-02-03
浏览807
xxzmxxxxzmxx软件开发工程师招行软件中心
where 1=1主要用于拼凑Sql的场景,不然当你拼凑的条件为空是,sql就变成 select 。。。from table where ,就会报错。它可能容易让开发忽视的是,如果条件拼凑为空,那么将会是全表扫描不过如果后续还有谓词过滤,那么就会使用谓词过滤啊。...显示全部
where 1=1主要用于拼凑Sql的场景,不然当你拼凑的条件为空是,sql就变成 select 。。。from table where ,就会报错。它可能容易让开发忽视的是,如果条件拼凑为空,那么将会是全表扫描
不过如果后续还有谓词过滤,那么就会使用谓词过滤啊。收起
互联网服务 · 2012-02-03
浏览895

提问者

qqdzyh
数据库管理员苏宁电器

相关问题

相关资料

相关文章

问题状态

  • 发布时间:2012-02-03
  • 关注会员:1 人
  • 问题浏览:15588
  • 最近回答:2012-03-27
  • X社区推广