如何处理多个联接

点网

我有一个复杂的查询,该查询总共需要4个表中的字段。内部联接导致查询花费的时间比应该花费的时间长得多。我运行了一个EXPLAIN语句,其视觉结果如下所示:

EXPLAIN语句输出

这是我的查询:

SELECT 
   pending_corrections.corrected_plate , pending_corrections.seenDate
FROM
    (pending_corrections
    INNER JOIN cameras ON pending_corrections.camerauid = cameras.camera_id)
        INNER JOIN
    vehicle_vrn ON (pending_corrections.corrected_plate = vehicle_vrn.vrn500
        OR pending_corrections.corrected_plate = vehicle_vrn.vrnno)
        INNER JOIN
    vehicle_ownership ON vehicle_vrn.fk_sysno = vehicle_ownership.fk_sysno
WHERE
    pending_corrections.seenDate >= '2015-01-01 00:00:00'
        AND pending_corrections.seenDate <= '2015-01-31 23:59:59'
ORDER BY pending_corrections.corrected_plate , pending_corrections.seenDate ASC;

如果没有OR其中一个联接,如何实现相同的效果

牙齿

作为a进行重写UNION很简单,复制源并删除每个中的ORed条件之一:

SELECT 
   pending_corrections.corrected_plate , pending_corrections.seenDate
FROM
    (pending_corrections
    INNER JOIN cameras ON pending_corrections.camerauid = cameras.camera_id)
        INNER JOIN
    vehicle_vrn ON (pending_corrections.corrected_plate = vehicle_vrn.vrn500)
        INNER JOIN
    vehicle_ownership ON vehicle_vrn.fk_sysno = vehicle_ownership.fk_sysno
WHERE
    pending_corrections.seenDate >= '2015-01-01 00:00:00'
        AND pending_corrections.seenDate <= '2015-01-31 23:59:59'

union 

SELECT 
   pending_corrections.corrected_plate , pending_corrections.seenDate
FROM
    (pending_corrections
    INNER JOIN cameras ON pending_corrections.camerauid = cameras.camera_id)
        INNER JOIN
    vehicle_vrn ON pending_corrections.corrected_plate = vehicle_vrn.vrnno)
        INNER JOIN
    vehicle_ownership ON vehicle_vrn.fk_sysno = vehicle_ownership.fk_sysno
WHERE
    pending_corrections.seenDate >= '2015-01-01 00:00:00'
        AND pending_corrections.seenDate <= '2015-01-31 23:59:59'

ORDER BY 1,2;

有索引pending_corrections.seenDate吗?

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

DMA如何/如何处理多个并发传输?

来自分类Dev

如何处理多个构建目标,例如dev,test,main?

来自分类Dev

如何处理批处理文件中的多个“ for”语句?

来自分类Dev

如何处理JSF多个意外异常?

来自分类Dev

如何处理多个异步方法的运行?

来自分类Dev

如何处理多个if语句PHP

来自分类Dev

Maven如何处理多个<repository>配置?

来自分类Dev

如何处理多个EditText的单个TextWatcher事件?

来自分类Dev

如何处理多个ListenableFutures?(春天)

来自分类Dev

Redux表单:如何处理多个按钮?

来自分类Dev

Flutter:如何处理多个setState()方法?

来自分类Dev

SCSS:如何处理多个值?

来自分类Dev

如何处理多个密码

来自分类Dev

XSLT如何处理多个嵌套元素?

来自分类Dev

DMA如何/如何处理多个并发传输?

来自分类Dev

如何处理批处理文件中的多个“ for”语句?

来自分类Dev

android如何处理多个实例?

来自分类Dev

如何处理JavaScript中的多个收益

来自分类Dev

MATLAB的“ if”函数如何处理多个输入

来自分类Dev

Rails-如何处理多个关联

来自分类Dev

如何处理多个流中的错误?

来自分类Dev

如何处理加入多个异步CompletableFutures?

来自分类Dev

如何处理多个组合/相关条件?

来自分类Dev

Doctrine,如何处理多个flush()

来自分类Dev

symfony 如何处理多个包路由?

来自分类Dev

如何处理函数中的多个参数?

来自分类Dev

如何处理 FIFO 的多个同时输入?

来自分类Dev

如何处理多个值的 DBNull 异常

来自分类Dev

如何处理多个单选按钮 - Angular