`
陈修恒
  • 浏览: 205689 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

SQL查询时, 当禁止使用 where 1=1

 
阅读更多

源自:

http://www.iteye.com/topic/710338

 

 

 也许很多人在开发多条件查询或模糊查询的时候,为保证不管选择哪种过滤条件总保证查询条件为true,于是在where子句后选择1=1或者0=0技巧来满足模糊查询。当然这的确对开发人员来说是一个不错的技巧。于是我在Mysql中通过上千万条的数据测试发现很耗性能。即便是建了常用字段的索引(排序)也没有作用,足以确定1=1很低效,大数据量很耗性能。 

  select * from t_user where 1=1 

   因为添加了"1=1"的过滤条件以后数据库系统无法使用索引等优化查询策略,数据库系统将会被迫对每行数据进行扫描(也就是全表扫描)来比较此行是否满足顾虑条件,当表中数据量比较大的时候查询速度会非常慢。 


-------------------- 
maoone2003的回答甚是不错(红色部分) 作为开题人 我采纳... 

select * from table where 1=1因为table中根本就没有名称为1的字段,所以该SQL等效于select * from table,这个SQL语句很明显是全表扫描,需要大量的IO操作,数据量越大越慢,建议查询时增加必输项,即where 1=1后面追加一些常用的必选条件,并且将这些必选条件建立适当的索引,效率会大大提高 
PS:这不是SQL写法的问题,也不是数据库的问题,是自己程序逻辑的问题
 

分享到:
评论
2 楼 thinkblog 2011-11-07  
嗯 我当初看到别人这么用 我也这么写过.其实,现在想想,为什么别人那么多?这么做真的会带来好处吗?
1 楼 董宗磊 2011-11-07  

相关推荐

    ====sql调优============

    1. **使用EXISTS和IN**:在某些情况下,使用`EXISTS`替代`IN`可以提高查询效率。例如,`NOT IN`运算可能导致全表扫描,而`NOT EXISTS`则能利用索引来加速查询。 2. **选择有利的连接顺序**:在多表联接查询中,选择...

    Oracle 开发DBA SQL编写规范

    - 在查询时仅选择需要的字段,避免使用`*`。 - 示例: ```sql -- 错误示例 select * from tab1; -- 正确示例 select col1, col2, col3 from tab1; ``` ##### 2.7 关联时表别名使用 - 使用表别名来简化SQL...

    防SQL注入脚本防SQL注入脚本

    当用户提交的数据作为SQL查询的一部分时,如果没有正确处理这些数据,就可能被攻击者利用。例如,假设一个登录页面的查询语句如下: ```sql SELECT * FROM users WHERE username = ' + @username + ' AND password ...

    DBA对Oracle SQL编写规范的总结

    - **规范要求**:在动态SQL中使用绑定变量可以提高性能,尤其是在执行多次相同查询时。 - **示例**: ```plsql DECLARE v_sql VARCHAR2(100); v_dept_id NUMBER := 10; BEGIN v_sql := 'SELECT * FROM ...

    sql书写优化和性能优化

    避免在WHERE子句中使用诸如`1=1`或`1=2`这样的表达式作为条件的一部分,例如 `SELECT col1, col2 FROM table_a WHERE 1=1 AND col1 > 0`。 **11. 禁止使用视图** 为了避免潜在的复杂性和维护困难,禁止使用视图。 ...

    有注释sql教程语句(1)

    4. **高级查询**:SQL的查询功能非常强大,包括但不限于`SELECT`语句的使用。例如,选择所有年龄大于18岁的学生: ```sql SELECT * FROM Students WHERE Age > 18; ``` 还可以进行多表联接(JOIN)、子查询、分组...

    SQL语句优化过程策略,帮助您优化Oracle查询语句

    - **应用场景**:当查询涉及到多表关联且有适合的索引时使用。 - **示例**: ```sql SELECT /*+ INDEX_JOIN(BSEMPMS SAL_HMI HIREDATE_BMI) */ SAL, HIREDATE FROM BSEMPMS WHERE SAL ; ``` ##### 12. /*+INDEX_...

    优化SQL全方案

    只有当查询中索引的首列被用于条件时,索引才能被使用。 **(10)优化聚合函数的使用** - `SELECT MAX(col2) FROM tb;` 使用此类聚合函数时,建议添加索引。如果需要对字段取`MAX`、`MIN`、`SUM`等,应该加索引。...

    sqlserver触发器例子

    触发器是SQL Server中一种特殊的存储过程,其特点在于不能被显式地调用,而是当对特定表进行数据操作(如插入、更新或删除)时自动激活。通过这种方式,触发器能够帮助实现复杂的业务逻辑和数据完整性约束。 #### ...

    创建与删除SQL约束或字段约束SQL约束控制

    当需要暂时禁用表中的所有约束时(例如,在进行大量数据导入操作之前),可以通过以下SQL语句来实现: ```sql SELECT 'ALTER TABLE ' + name + ' NOCHECK CONSTRAINT ALL' FROM sys.tables WHERE type = 'U' ``` ...

    EOS入门必备之SQL_Server篇.doc

    了解并掌握SQL Server的基本操作对于EOS的使用至关重要,包括创建和管理数据表、插入和修改数据以及执行查询。这些基础技能将帮助用户在EOS环境中有效地管理和操作数据,实现业务需求。通过学习和实践,可以进一步...

    SQL攻击与防御

    1. **参数化查询**:使用预编译的语句和参数化查询可以防止SQL注入。 - 示例:使用`PreparedStatement`(Java)或参数化查询(PHP)。 2. **输入验证**:对所有用户输入进行严格的验证和过滤。 - 示例:限制特殊...

    MySQL并发更新数据时的处理方法

    例如,在SQL语句`UPDATE table1 SET num = num + 1 WHERE id=1;`的情况下,MySQL实际上会执行类似以下两步操作的逻辑: 1. `a = SELECT * FROM table1 WHERE id=1;` 2. `UPDATE table1 SET num = a.num + 1 WHERE ...

    SQL Server注入大全及防御

    当Web应用程序返回SQL错误消息时,攻击者可以通过观察这些错误信息来推断数据库结构和表名等信息,进而构造更复杂的SQL语句进行进一步攻击。例如: - **利用错误信息获取敏感数据**:通过构造导致SQL语法错误的查询...

    SQL开发规范

    - **索引复用**:例如,在`col1, col2`上建立联合索引,则`SELECT col1, col3 FROM t WHERE col1='?'`也将使用到该索引。 - **过滤条件优化**:针对索引字段使用有效的过滤条件,如`>`、`>=`、`=`、`、`<=`、`...

    SQL21天自学通.pdf

    - **在子查询中使用汇总函数**:可以在子查询中使用汇总函数来筛选数据。 - 示例:从“employees”表中选择年龄大于平均年龄的员工。 ```sql SELECT name FROM employees WHERE age > (SELECT AVG(age) FROM ...

    SQL编码规范.pdf

    - **规则2.8 换行规则**:当SQL语句过长时,应在适当的逻辑断点处换行。 - **规则2.9 空格**:在关键字与操作符之间添加空格,如`SELECT * FROM table WHERE column = 'value'`。 - **规则2.10 大小写规则**:统一...

    IBM的sql开发规范

    - **避免在WHERE子句中使用IN/NOT IN**:推荐使用EXISTS或NOT EXISTS,它们通常更高效,特别是与关联查询配合时。 - **避免使用>、<操作符**:优先使用>=和<=,以减少数据库的扫描次数。 - **慎用DISTINCT**:它...

    Sql修改标示列的方法

    UPDATE syscolumns SET colstat = 1 WHERE id = OBJECT_ID('tablename') AND name = '标识列名称'; ``` 其中,`tablename`和`标识列名称`需要根据实际情况进行替换。 #### 5. 重新设置标识的起始值 有时候,可能...

    C#防SQL注入代码

    3. 参数化查询:使用参数化SQL语句,例如ADO.NET中的SqlCommand对象,这样可以确保即使输入包含SQL语句,也不会被执行。 示例代码: ```csharp using System.Data.SqlClient; string input = "用户输入"; string ...

Global site tag (gtag.js) - Google Analytics