多个小查询与单个长查询.哪一个更有效率?

om_*_*nde 5 mysql

以下哪一种方法更有效:

  1. 单个较长的查询:

    "SELECT COUNT( * ) AS num
    FROM (
    
        SELECT users.UID, cnumber
        FROM users
        JOIN identity ON users.UID = identity.UID
        WHERE  'abc'
        IN (google, facebook, twitter, linkedin)
    
    ) AS userfound
    JOIN jobs ON userfound.cnumber = jobs.cnumber
    WHERE JID = 24";
    
    
    if(resultfromquery == 1)
        //Some code here
    else
        //Some code here
    
    Run Code Online (Sandbox Code Playgroud)
  2. 将较长的查询分解为多个单表查询:

    uid = "SELECT UID FROM identity WHERE 'abc' IN (google, facebook, twitter, linkedin)";
    cnumber_from_usertable = "SELECT cnumber FROM users WHERE UID = 'uid'";
    cnumber_from_jobtable = "SELECT cnumber FROM jobs WHERE JID = 24";
    
    if(cnumber_from_usertable == cnumber_from_jobtable)
        //Some code here
    else
        //Some code here
    
    Run Code Online (Sandbox Code Playgroud)

Tsc*_*cka 6

测量微时差;-)我会使用单个查询,更少的连接,更少的等待时间,它旨在处理这类事情.

http://www.phpjabbers.com/measuring-php-page-load-time-php17.html

<?php
$time = microtime();
$time = explode(' ', $time);
$time = $time[1] + $time[0];
$start = $time;
?>
"SELECT COUNT( * ) AS
FROM (

    SELECT users.UID, cnumber
    FROM users
    JOIN identity ON users.UID = identity.UID
    WHERE  'abc'
    IN (google, facebook, twitter, linkedin)

) AS userfound
JOIN jobs ON userfound.cnumber = jobs.cnumber
WHERE JID = 24";


if(resultfromquery == 1)
    //Some code here
else
    //Some code here

<?php
$time = microtime();
$time = explode(' ', $time);
$time = $time[1] + $time[0];
$finish = $time;
$total_time = round(($finish - $start), 4);
echo 'Page generated in '.$total_time.' seconds.';
?>
Run Code Online (Sandbox Code Playgroud)


小智 5

其实我对此有一些不同的看法。MYSQL 支持子查询,原因之一是将较大的查询分解为较小的查询。如果您正在使用 INNODB 引擎并正确使用参数,例如 tmp 表、堆表、缓冲池或查询缓存,那么您可能会获得比较小查询更好的结果。MYSQL 旨在执行大量小查询,因此最好有更多的小查询,然后是更大的查询。

如果更大的查询是更好的选择,那么我们就不需要创建像 Infinidb 和 INfobright 这样的工具,它们使用基于列的结构来运行大型查询,而 MYSQL 是基于行的。

所以想一想,小查询的结果会比一个大的单个查询更好,并且开销不是查询,而是连接,而且 MYSQL 的连接非常便宜,所以不用担心它们。但是,如果您的 MYSQL 正在创建线程,那么您无需担心。

简而言之,少量查询与巨型大型查询将是我的选择。