锁定老帖子 主题:低效的where 1=1
该帖已经被评为隐藏帖
|
|
---|---|
作者 | 正文 |
发表时间:2010-07-13
以前用 delphi 经常用 select * from table where 1=2 来构造一个内存临时表
|
|
返回顶楼 | |
发表时间:2010-07-13
不是用不用索引的问题。不用索引和用了索引都会全扫。只是说扫的地方是不一样的。
应该在代码中就避免这种问题 |
|
返回顶楼 | |
发表时间: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) |
|
返回顶楼 | |
发表时间: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一个数据量庞大的表。 |
|
返回顶楼 | |
发表时间: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) -------------------------- 我是请问你的数据量有多大? 上千万条?甚至更大 |
|
返回顶楼 | |
发表时间:2010-07-14
我是请问你的数据量有多大?
上千万条?甚至更大 |
|
返回顶楼 | |
发表时间:2010-07-14
我给的条件专门是测试加where 1=1 和不加的测试。。。
并且在sqlserver2000中已经证明过。。 |
|
返回顶楼 | |
发表时间:2010-07-14
如果1=1都过滤不掉的话,mysql就没有今天的成就了。
|
|
返回顶楼 | |
发表时间:2010-07-14
1=1 这个经常用
|
|
返回顶楼 | |
发表时间:2010-07-14
没有什么区别,
试了好几次,每一次查询的时间都差不了多少。 |
|
返回顶楼 | |