Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/63.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql 如何减少执行select查询的时间_Mysql - Fatal编程技术网

Mysql 如何减少执行select查询的时间

Mysql 如何减少执行select查询的时间,mysql,Mysql,减少运行时间选择查询执行时间 即使是查询也不起作用 它正在减少代码行 有80张桌子 select (ant_return_loss_pass='pass')+(ant_cross_isolation_pass='pass') as pass_count, (ant_return_loss_pass='fail')+(ant_cross_isolation_pass='fail') as fail_count, (ant_return_loss_pass='')

减少运行时间选择查询执行时间 即使是查询也不起作用 它正在减少代码行 有80张桌子

select 
     (ant_return_loss_pass='pass')+(ant_cross_isolation_pass='pass') as pass_count,
     (ant_return_loss_pass='fail')+(ant_cross_isolation_pass='fail') as fail_count,
     (ant_return_loss_pass='')    +(ant_cross_isolation_pass='') as blank_count
from 
(
  select A.serial_no,
         A.pass_fail as ant_return_loss_pass    
  from ant_return_loss A,
  (                                
      select max(register_date) as date
        from ant_return_loss 
        where 1=1
          and serial_no >= '184500074' 
          and serial_no <= '184500076' 
        group by serial_no
  ) B                                 
  where 1 = 1                     
    and A.register_date = B.date     
)AA
,(
  select A.serial_no,
         A.pass_fail as ant_cross_isolation_pass    
  from ant_cross_isolation A,
  (                                
      select  max(register_date) as date
        from ant_cross_isolation 
        where 1=1
          and serial_no >= '184500074' 
          and serial_no <= '184500076' 
        group by serial_no
  ) B                                 
  where 1 = 1                     
    and A.register_date = B.date     
)BB
where 1=1
  and AA.serial_no = BB.serial_no

不工作或工作600秒以下查询使用显式联接语法和大小写表达式使查询更易于理解:

SELECT
    COUNT( CASE WHEN ant_return_loss_pass = 'pass' AND
                     ant_cross_isolation_pass = 'pass' THEN 1 END ) AS pass_count
  , COUNT( CASE WHEN ant_return_loss_pass = 'fail' AND
                     ant_cross_isolation_pass = 'fail' THEN 1 END ) AS fail_count
  , COUNT( CASE WHEN ant_return_loss_pass = '' AND
                     ant_cross_isolation_pass = '' THEN 1 END )     AS blank_count
FROM (
    SELECT
        A.serial_no
      , A.pass_fail AS ant_return_loss_pass
    FROM ant_return_loss A
    INNER JOIN (
            SELECT MAX( register_date ) AS date
            FROM ant_return_loss
            WHERE serial_no >= '184500074'
            AND serial_no <= '184500076'
            GROUP BY serial_no
        ) B ON A.register_date = B.date
    ) AA
INNER JOIN (
        SELECT
            A.serial_no
          , A.pass_fail AS ant_cross_isolation_pass
        FROM ant_cross_isolation A
        INNER JOIN (
                SELECT  MAX( register_date ) AS date
                FROM ant_cross_isolation
                WHERE serial_no >= '184500074'
                AND serial_no <= '184500076'
                GROUP BY serial_no
            ) B ON A.register_date = B.date
    ) BB ON AA.serial_no = BB.serial_no
然后:


直到您检查了所有部分以找到提高性能的方法。

什么版本的MySQL?你能提供样本数据吗?基于样本数据的预期结果是什么?当有超过8个表时,它不起作用;不管怎样,那是什么意思?什么不起作用?8点以上的桌子是什么?那是8张桌子吗?如果您在问题中提出的查询不是真正的查询,那么任何人如何帮助他们完成他们没有看到的查询?您是否尝试过检查任何解释计划?
            explain
            SELECT MAX( register_date ) AS date
            FROM ant_return_loss
            WHERE serial_no >= '184500074'
            AND serial_no <= '184500076'
            GROUP BY serial_no
    explain
    SELECT
        A.serial_no
      , A.pass_fail AS ant_return_loss_pass
    FROM ant_return_loss A
    INNER JOIN (
            SELECT MAX( register_date ) AS date
            FROM ant_return_loss
            WHERE serial_no >= '184500074'
            AND serial_no <= '184500076'
            GROUP BY serial_no
        ) B ON A.register_date = B.date