• No.595-Big Countries-(LeetCode之Database篇)


    数据库表


    给出的数据库表如下,表名为World

    +—————–+————+————+————–+—————+
    |   name         | continent |    area    | population | gdp             |
    +—————–+————+————+————–+—————+
    | Afghanistan | Asia        | 652230   | 25500100 | 20343000    |
    | Albania        | Europe   | 28748      | 2831741   | 12960000    |
    | Algeria         | Africa     | 2381741   | 37100000 | 188681000 |
    | Andorra       | Europe   | 468           | 78115       | 3712000     |
    | Angola         | Africa     | 1246700   | 20609294 | 100990000 |
    +—————–+————+————+————–+—————+

    问题表述


     
    如果一个国家的面积大于三百万平方公里,或者人口数大于两千五百万,那么这个国家就是一个大国

    写一个SQL语句将大国的name、population、area选择出来。
     
     

    问题解决


    下面是我写的SQL语句:

    select name,population,area
    from World
    where area >= 3000000 or population >= 25000000

    提交后结果是正确的。提交后我去了讨论区,发现有更好的解决方案:

    SELECT name, population, area
    FROM World
    WHERE area > 3000000 
    
    UNION
    
    SELECT name, population, area
    FROM World
    WHERE population > 25000000

    这里写图片描述

    可以看到上面这个SQL语句执行速度是要略快于第一个SQL的,这是为什么呢?

    第一个SQL我们使用了OR,第二个SQL我们使用的是UNION。

    用OR的子句可以分解成多个查询,并且通过UNION 连接多个查询。他们的速度只同是否使用索引有关,如果查询需要用到联合索引,用 UNION ALL执行的效率更高,但是UNION ALL不会去除重复的行。

    采用OR不会用到索引,改写成UNION的形式再试图与索引匹配。一个关键的问题是否用到索引。所以我们再使用SQL查询时尽量使用UNION,如果对重复列没有要求,则尽量使用UNION ALL。

  • 相关阅读:
    [转]CR, LF, CR/LF区别与关系
    [转]Maven与nexus关系
    [转]Ubuntu默认使用root用户登录并免去输入密码
    [转]PL/SQL Developer 导入导出csv文件
    [转]关于胖客户端和瘦客户端的理解
    解决win7 安装完jdk7后,再安装jdk8出现的问题 has value '1.8', but '1.7' is required.
    [转]10 Awesome Indicator Applets for Ubuntu’s Unity Desktop
    简单的多对一传输ns2仿真
    论文阅读笔记 (2007-06-09)
    一个简单的ns2实验全过程
  • 原文地址:https://www.cnblogs.com/KKSJS/p/9622820.html
Copyright © 2020-2023  润新知