论坛首页 综合技术论坛

低效的where 1=1

浏览 41501 次
该帖已经被评为隐藏帖
作者 正文
   发表时间:2010-07-13  
以前用 delphi 经常用 select * from table where 1=2 来构造一个内存临时表
0 请登录后投票
   发表时间:2010-07-13  
不是用不用索引的问题。不用索引和用了索引都会全扫。只是说扫的地方是不一样的。

应该在代码中就避免这种问题
0 请登录后投票
   发表时间:2010-07-13  
mysql5.0,两次执行完全一样,均使用到了索引。所以lz结论是错误的。

mysql> explain select * from pu_user_message where userid=1\G
*************************** 1. row ***************************
           id: 1
  select_type: SIMPLE
        table: pu_user_message
         type: ref
possible_keys: userid_index
          key: userid_index
      key_len: 5
          ref: const
         rows: 1
        Extra: Using where
1 row in set (0.00 sec)
mysql> explain select * from pu_user_message where 1=1 and userid=1\G
*************************** 1. row ***************************
           id: 1
  select_type: SIMPLE
        table: pu_user_message
         type: ref
possible_keys: userid_index
          key: userid_index
      key_len: 5
          ref: const
         rows: 1
        Extra: Using where
1 row in set (0.00 sec)
0 请登录后投票
   发表时间:2010-07-13  
flysnowxf 写道
mysql5.0,两次执行完全一样,均使用到了索引。所以lz结论是错误的。

mysql> explain select * from pu_user_message where userid=1\G
*************************** 1. row ***************************
           id: 1
  select_type: SIMPLE
        table: pu_user_message
         type: ref
possible_keys: userid_index
          key: userid_index
      key_len: 5
          ref: const
         rows: 1
        Extra: Using where
1 row in set (0.00 sec)
mysql> explain select * from pu_user_message where 1=1 and userid=1\G
*************************** 1. row ***************************
           id: 1
  select_type: SIMPLE
        table: pu_user_message
         type: ref
possible_keys: userid_index
          key: userid_index
      key_len: 5
          ref: const
         rows: 1
        Extra: Using where
1 row in set (0.00 sec)

赞,这才是合理的测试,因为不加其他where条件是毫无意义的,实际运行不可能不加其他任何参数,直接select一个数据量庞大的表。
0 请登录后投票
   发表时间:2010-07-14  
flysnowxf 写道
mysql5.0,两次执行完全一样,均使用到了索引。所以lz结论是错误的。

mysql> explain select * from pu_user_message where userid=1\G
*************************** 1. row ***************************
           id: 1
  select_type: SIMPLE
        table: pu_user_message
         type: ref
possible_keys: userid_index
          key: userid_index
      key_len: 5
          ref: const
         rows: 1
        Extra: Using where
1 row in set (0.00 sec)
mysql> explain select * from pu_user_message where 1=1 and userid=1\G
*************************** 1. row ***************************
           id: 1
  select_type: SIMPLE
        table: pu_user_message
         type: ref
possible_keys: userid_index
          key: userid_index
      key_len: 5
          ref: const
         rows: 1
        Extra: Using where
1 row in set (0.00 sec)

--------------------------
我是请问你的数据量有多大?
上千万条?甚至更大
0 请登录后投票
   发表时间:2010-07-14  
我是请问你的数据量有多大?
上千万条?甚至更大
0 请登录后投票
   发表时间:2010-07-14  
我给的条件专门是测试加where 1=1 和不加的测试。。。
并且在sqlserver2000中已经证明过。。
0 请登录后投票
   发表时间:2010-07-14  
如果1=1都过滤不掉的话,mysql就没有今天的成就了。
0 请登录后投票
   发表时间:2010-07-14  
1=1 这个经常用
0 请登录后投票
   发表时间:2010-07-14  
没有什么区别,
试了好几次,每一次查询的时间都差不了多少。
0 请登录后投票
论坛首页 综合技术版

跳转论坛:
Global site tag (gtag.js) - Google Analytics