使用WHERE或JOIN从不同的表中进行选择?

时间:2016-07-07 03:47:53

标签: sql performance union database-performance query-performance

我想从6个表中选择信息我有2个选择 第一个用where语句:

SELECT columns 
FROM   db1, 
       db2, 
       db3, 
       db4, 
       db5, 
       db6 
WHERE  db1.id = $user_id 
        OR db2.user_id = $user_id 
        OR db3.user_id = $user_id 
        OR db4.user_id = $user_id 
        OR db5.user_id = $user_id 
        OR db6.user_id = $user_id 

$user_id是php 1variable`,包含user_id;

Second Choice连接表和一个where语句: like here 哪一个快速,有用且清晰?我希望获得快速结果,因为我会用非常复杂的查询进行那种查询

1 个答案:

答案 0 :(得分:1)

你想这样做

<?php
// works on php 5.6
add_action( 'genesis_before_entry_content', 'state_meta' );
function state_meta() {
    if(!empty(genesis_get_custom_field('state')))
    {
        echo '<br /><strong>State</strong>: ';
        genesis_custom_field('state');
    }
}
?>

<?php
// works on php < 5.6
add_action( 'genesis_before_entry_content', 'state_meta' );
function state_meta() {
    if(genesis_get_custom_field('state') != '')
    {
        echo '<br /><strong>State</strong>: ';
        genesis_custom_field('state');
    }
}
?>

在所有6个表的id列上放置一个索引。这将具有O(N)或更快的性能。

如果您想从多个表中获得相同的结果(例如,请保留重复项),您也可以使用SELECT columns FROM db1 WHERE id = $user_id UNION SELECT columns FROM db2 WHERE id = $user_id UNION SELECT columns FROM db3 WHERE id = $user_id UNION SELECT columns FROM db4 WHERE id = $user_id UNION SELECT columns FROM db5 WHERE id = $user_id UNION SELECT columns FROM db6 WHERE id = $user_id 而不是UNION ALLUNION要快得多,所以如果可以,请使用它。

您所拥有的查询将交叉连接所有表格,并且性能为O(N ^ 6),因为我确定您已找到。