`

看你知道不知道之-你注意Where子句的次序了吗?

阅读更多
这个系列越来越多的是和SQL语句相关的问题了,因为这段时间工作和这个有关,呵呵,不管那么多了,反正,都是和开发相关的问题,就继续吧。

我们通常不太注意SQL语句中Where子句的次序问题,但是这个次序往往会影响整个SQL语句的执行性能,举个例子吧。

比如有一个表有3个列,分别是班级、学号、姓名。

表中的数据共100条,其中1班50人,学号从1到50,二班50人,学号从1到50。

那么现在的任务是在表中找到1班学号为10的学生,查询语句就有两种写法。

1:Select 姓名 From 学生表 Where 班级=1 And 学号=10

2:Select 姓名 From 学生表 Where 学号=10 And 班级=1 

虽然返回的结果一样,但是这两个到底那个好呢?

衡量一个Sql语句好与坏,主要看性能,而影响Select语句的通常是Table Scan,我们来看看到底执行了几次Table Scan。

1:100+50=150,首先扫描全表找到50个1班的,然后早扫描50次找到学号为10的。

2:100+2=102,首先扫描全表找到2个10号的,然后扫描2次找到班级为1班的。

呵呵,这就说明在Where子句中应该先处理查询范围大的,然后处理查询范围小的,就像开车下坡是越来越快的。

当然这个也并不绝对,因为如果优化了索引,Table Scan就会减轻,并根据索引进行Where子句的优化,但是无论是否索引,我们都应该养成这个好习惯,难道不是吗?
 
分享到:
评论

相关推荐

    mysql修改语句-mysql

    注意:修改一行数据的多个列值时,SET 子句的每个值用逗号分开即可。 修改表中的数据 【实例 1】在 tb_courses_new 表中,更新所有行的 course_grade 字段值为 4,输入的 SQL 语句和执行结果如下所

    SQL COOKBOOK(压缩1/2)

    1.6在WHERE子句中引用取别名的列 1.7连接列值 1.8在SELECT语句中使用条件逻辑 1.9限制返回的行数 1.10从表中随机返回n条记录 1.11查找空值 1.12将空值转换为实际值 1.13按模式搜索 第2章 查询结果排序 2.1...

    SQL COOKBOOK(压缩2/2)

    1.6在WHERE子句中引用取别名的列 1.7连接列值 1.8在SELECT语句中使用条件逻辑 1.9限制返回的行数 1.10从表中随机返回n条记录 1.11查找空值 1.12将空值转换为实际值 1.13按模式搜索 第2章 查询结果排序 2.1...

    2009达内SQL学习笔记

    六、WHERE子句,选择、过滤 其后只能跟逻辑语句,返回值只有ture或false 如: select last_name,salary from s_emp where salary=1000;--找出工资1000的人 WHERE子句操作符: 1、逻辑比较运算符 = 等于 != ...

    SQL编写规范(数据库操作规范)

     根据这个原理,表之间的连接必须写在其他WHERE条件之前,那些可以过滤掉最大数量记录的条件必须写在WHERE子句的末尾    例如:  (低效,执行时间156.3秒)  SELECT *  FROM EMP E  WHERE SAL > 50000  AND ...

    哪些是数据库系统的组成.doc

    则与此基本表相关的下列内容中哪些也自 动被删除 关系R和S的联接 对由SELECT--FROM—WHERE—GROUP-- ORDER组成的SQL语句,其在被DBMS处理时,各子句的执行次序为( )。 视图概念 函数依赖 模式分解 事务的特性 ...

    SQL查询语句精华大全

    简单的Transact-SQL查询只包括选择列表、FROM子句和WHERE子句。它们分别说明所查询列、查询的 表或视图、以及搜索条件等。 例如,下面的语句查询testtable表中姓名为“张三”的nickname字段和email字段。 SELECT ...

    大全集锦SQL查询语句

    简单的Transact-SQL 查询只包括选择列表、FROM 子句和WHERE 子句。它们分别说明所查询列、查询的 表或视图、以及搜索条件等。 例如,下面的语句查询testtable 表中姓名为“张三”的nickname 字段和email 字段。 代码...

    《mysql必知必会》学习笔记第七章–第十二章

    7.1组合WHERE子句 7.1.3 计算次序 SQL(像多数语言一样)在处理OR操作符前,优先处理AND操作符。 解决:任何时候使用具有AND和OR操作符的WHERE子句,都应该使用圆括号明确地分组操作符。不要过分依赖默认计算次序,...

    MySQL中文参考手册

    # 5.4.5.1 不使用外键的理由 + 5.4.6 视图(Views) + 5.4.7 '--'作为一个 注解的开始 o 5.5 MySQL 遵循什么标准? o 5.6 怎样处理没有提交/回卷(COMMIT / ROLLBACK) * 6 MySQL 存取权限系统 o 6.1 权限系统做...

    MYSQL

    7.3.10 多列索引 7.3.11 使用来自其他数据库引擎的列类型 7.4 用在SELECT和WHERE子句的函数 7.4.1 分组函数 7.4.2 常用的算术运算 7.4.3 位函数 7.4.4 逻辑运算 7.4.5 比较运算符 ...

    SQL必知必会(第3版)--详细书签版

    12.2.1 WHERE子句的重要性 75 12.2.2 内部联结 77 12.2.3 联结多个表 78 12.3 小结 80 第13章 创建高级联结 81 13.1 使用表别名 81 13.2 使用不同类型的联结 82 13.2.1 自联结 82 13.2.2 自然联结 84 ...

    MySQL中文参考手册.chm

    x86 注意事项 4.11.5.2 RedHat 5.0 注意事项 4.11.5.3 RedHat 5.1 注意事项 4.11.5.4 Linux-SPARC 注意事项 4.11.5.5 Linux-Alpha 注意事项 4.11.5.6 MkLinux 注意事项 4.11.5.7 Qube...

    解决mysql 组合AND和OR带来的问题

    当SQK看到上述WHERE子句时,由于AND在计算次序中优先级更高,操作符被错误的组合了。 此问题的解决方法是使用圆括号明确地分组相应的操作符。 请看下面的SELECT 语句 SELECT prod_name,prod_price FROM pr

    Oraclet中的触发器

    触发器的PL/SQL块中应用相关名称时,必须在它们之前加冒号(:),但在WHEN子句中则不能加冒号。 WHEN 子句说明触发约束条件。Condition 为一个逻辑表达时,其中必须包含相关名称,而不能包含查询语句,也不能调用PL/...

    精通SQL--结构化查询语言详解

    5.4 使用where子句定义搜索条件查询 93 5.4.1 where子句单条件查询 93 5.4.2 单值比较运算符 94 5.4.3 between运算符范围筛选 96 5.4.4 null值的判断 97 第6章 复杂搜索条件查询 99 6.1 本章用到的实例表 99 ...

    SQL Server系统调优解决方案

    5. 经常用于where子句的列上创建索引  不使用索引的原则 1. 查询很少使用和参考的列不建索引 2. 对只有少数值的列不建索引 3. 定义为text、image、bit的列不建索引 4. 当需要update性能远远高于select性能时不建或...

    精通SQL 结构化查询语言详解

    5.4 使用WHERE子句定义搜索条件查询  5.4.1 WHERE子句单条件查询 5.4.2 单值比较运算符 5.4.3 BETWEEN运算符范围筛选 5.4.4 NULL值的判断 第6章 复杂搜索条件查询  6.1 本章用到的实例表  6.2 组合查询...

    SQL数据排序与分组

     数据分组:是按照逻辑次序把具有重复值的字段进行合并。  二、GROUP BY子句  语法:   SELECT column1,column2 FROM table1,table2 WHERE conditions GROUP BY column1,column...

    数据库考试资料 各种题型vf

    (1)一般来说,VFP的命令总是由一个称为___命令___动词开头。_命令名词____是命令的名字,代表一种VFP的操作。 (2)请将下列式子写成VFP的合法表达式: ...在SQL查询时,使用(WHERE)子句指出的是查询条件。

Global site tag (gtag.js) - Google Analytics