加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > PHP教程 > 正文

php – 优化这个mysql查询

发布时间:2020-12-13 21:38:45 所属栏目:PHP教程 来源:网络整理
导读:有人可以优化这个 mysql查询 SELECT submittedform.*,inspectors.first_name,inspectors.last_name FROM ( SELECT `dinsp`,`departure`,`arrival`,'cabin' as type FROM cabinets UNION SELECT `dinsp`,'cockpit' as type FROM cockpits ORDER BY `date_of_i
有人可以优化这个 mysql查询

SELECT submittedform.*,inspectors.first_name,inspectors.last_name
  FROM (
       SELECT `dinsp`,`departure`,`arrival`,'cabin' as type FROM cabinets 
       UNION
       SELECT `dinsp`,'cockpit' as type FROM cockpits
       ORDER BY `date_of_inspection` ASC
       ) AS submittedform 
       INNER JOIN inspectors ON inspectors.id = submittedform.dinsp

我不想依赖嵌套查询,或者在这种情况下是否正常?还建议我一个cakephp解决方案,但表格无法相关.

解决方法

你可以试试:

SELECT sf.`dinsp`,sf.`departure`,sf.`arrival`,sf.`type`,i.`first_name`,i.`last_name`
FROM
    `inspectors` AS i INNER JOIN (
    SELECT `dinsp`,`date_of_inspection`,'cabin' AS `type`
    FROM `cabinets`
    UNION ALL
    SELECT `dinsp`,'cockpit' AS `type`
    FROM `cockpits`
) AS sf ON sf.`dinsp` = i.`id`
ORDER BY sf.`date_of_inspection`

UNION ALL不会检查重复项.始终将ORDER BY子句放在外部查询中以确保正确排序.

最好避免使用UNION,因为它不允许查询优化器使用你在dinsp和date_of_inspection上可能有的任何索引.但这意味着要改变架构.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读