zoukankan      html  css  js  c++  java
  • 看你知道不知道之-你注意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子句的优化,但是无论是否索引,我们都应该养成这个好习惯,难道不是吗?
     
  • 相关阅读:
    Nagios 监控网络流量(Windows主机和交换机)
    Nagios监控Windows服务器(NSClient++安装与应用)
    Mysql源码安装
    NETSNMP配置
    Linux 下文件解压
    cacti没有图像 排错
    菜鸟写游戏外挂
    什么是IDOC,以及IDOC的步骤
    后台跑程序(仿SM36)
    smartforms参数
  • 原文地址:https://www.cnblogs.com/Duiker/p/331481.html
Copyright © 2011-2022 走看看