zoukankan      html  css  js  c++  java
  • 数据库~Mysql派生表注意的几点~关于百万数据的慢查询问题

    基础概念

    派生表是从SELECT语句返回的虚拟表。派生表类似于临时表,但是在SELECT语句中使用派生表比临时表简单得多,因为它不需要创建临时表的步骤。

    术语:*派生表*和子查询通常可互换使用。当SELECT语句的FROM子句中使用独立子查询时,我们将其称为派生表。

    以下说明了使用派生表的查询:

    请注意,独立子查询是一个子查询,可独立于包含该语句的执行语句!与子查询不同,派生表必须具有别名

    实例中的例子

    下面是一个派生表的例子

    EXPLAIN SELECT
        *
    FROM
        (
            SELECT
                companyid,
                count(*)
            FROM
                system_company where CompanyId=1
        ) as a
    limit 10

    EXPLAIN 这个执行计划中可以发展,派生表没有走索引

    事实上,这个问题告诉我们,在数据量大的时候,不要使用派生表,那么应该使用什么呢?

    下面请看子查询的例子

    EXPLAIN SELECT 
        (
            SELECT
                companyid
            FROM
                system_company
            WHERE
                CompanyId = a.companyid
            LIMIT 1
        ) as field1
    FROM system_company  AS a
    where companyid=1

    通过查询计划可以看到,它是走索引的,所有执行效率自然快!

    在我们进行分组统计时,也应该尽量使用子查询,而不是派生表,看下面的例子,分别实现了对公司进行统计,将system_companydetails里的数量求和

    派生表(全表扫描,效率低下):

    EXPLAIN SELECT
        s.companyid,a.count
    FROM system_company s
    inner join 
        (
            SELECT
                companyid,
                count(*) as count
            FROM
                system_companydetails
         
        ) AS a on s.companyid=a.companyid
    LIMIT 10 
    
     

    子查询(索引聚合,值得推荐):

    EXPLAIN SELECT
        s.companyid,
        (
            SELECT
                count(*)
            FROM
                system_companydetails
            WHERE
                companyid = s.companyid
        ) AS count
    FROM
        system_company s
    where companyid=1

    感谢各位的阅读与分析!

    有问题欢迎讨论!

  • 相关阅读:
    MXNet.gluon——图像I/O
    ECCV2018 论文简析 Oral_1 持续更新
    hdu 3123 GCC
    hdu 2481 Toy
    hdu 3441 Rotation
    hdu 1812 Count the Tetris
    hdu 3923 Invoker
    hdu 1352 I Conduit!
    2013 ACM-ICPC长沙赛区全国邀请赛——Bottles Arrangement
    2013 ACM-ICPC长沙赛区全国邀请赛—Special equations
  • 原文地址:https://www.cnblogs.com/lori/p/8534763.html
Copyright © 2011-2022 走看看