Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/57.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查询优化订单_Mysql_Select_Sql Order By - Fatal编程技术网

通过MYSQL查询优化订单

通过MYSQL查询优化订单,mysql,select,sql-order-by,Mysql,Select,Sql Order By,我有下面的查询,它使用ORDERBY和limit。拉取16k左右的数据需要2分钟25秒。我也做了适当的索引,但执行速度仍然很慢。当仅应用限制20时,也采用相同的时间。删除ORDER BY后,query将在17秒内获取相同的数据。所有表均为拉丁字符集。请建议任何可能的解决方案 SELECT a.customer, a.division AS division, a.noitaziraa_id AS noitaziraaId, DATE_FORMAT(a.request_date, '%m/%d/

我有下面的查询,它使用ORDERBY和limit。拉取16k左右的数据需要2分钟25秒。我也做了适当的索引,但执行速度仍然很慢。当仅应用限制20时,也采用相同的时间。删除ORDER BY后,query将在17秒内获取相同的数据。所有表均为拉丁字符集。请建议任何可能的解决方案

SELECT 
a.customer,
a.division AS division,
a.noitaziraa_id AS noitaziraaId,
DATE_FORMAT(a.request_date, '%m/%d/%Y') AS RequestDate,
a.request_date AS RequestDateSort,
DATE_FORMAT(noita.date_of_birth, '%m/%d/%Y') AS dob,
noita.date_of_birth AS dobSort,
IF(
a.noita_type = 'Noita Stay',
a.length_of_stay,
NULL
) AS requestedDays,
IF(
a.noita_type = 'Noita Stay',
CONCAT_WS(
  ',',
  a.facility_provider_city,
  a.facility_provider_state
),
''
) AS facilityCityState,
IF(
a.noita_type = 'Noita Stay',
IFNULL(
  DATE_FORMAT(aips.admission_date, '%m/%d/%Y'),
  ''
),
''
) AS admitDate,
IF(
a.noita_type = 'Noita Stay',
aips.admission_date,
''
) AS admitDateSort,
IF(
a.noita_type = 'Noita Stay',
IFNULL(
  DATE_FORMAT(
    aipsd.discharge_date,
    '%m/%d/%Y'
  ),
  ''
),
''
 ) AS dischargeDate,
  IF(
a.noita_type = 'Noita Stay',
aipsd.discharge_date,
''
 ) AS dischargeDateSort,
  IF(
a.noita_type = 'Noita Stay',
IFNULL(dl1.`description`, ''),
''
 ) AS dischargeDisposition,
 a.gender,
 a.age,
  a.relationship AS relationship,
  noita.groupid,
  a.request_type AS requestType,
  a.prog_status AS programStatus,
 dl.description AS billingDetails,
 a.referred_to_npi AS NPI,
 a.program AS program,
 CASE
  WHEN a.status = 'OPEN' 
  THEN DATEDIFF(NOW(), a.auth_request_date) 
  ELSE 0 
  END AS 'daysSinceRequest',
  a.first_name AS firstName,
 a.last_name AS lastName,
dl2.description AS levelOfUrgency,
 a.member_id AS memberId,
a.created_full_name AS createdFullName,
CONCAT_WS(
',',
COALESCE(a.assigned_to, NULL),
COALESCE(
  a.auth_review_assigned_user_name,
  NULL
),
COALESCE(
  a.auth_con_review_assigned_user_name,
  NULL
),
COALESCE(a.assigned_queue, NULL),
COALESCE(
  a.auth_review_assigned_queue_name,
  NULL
 ),
 COALESCE(
  a.auth_con_review_assigned_queue_name,
  NULL
 )
 ) AS assignedTo,
a.status,
DATE_FORMAT(a.opened_date, '%m/%d/%Y') AS openDate,
 a.opened_date AS openDateSort,
 DATE_FORMAT(a.closed_date, '%m/%d/%Y') AS closedDate,
 a.closed_date AS closedDateSort,
 a.noita_type AS authType,
 a.facility_provider AS facilityProvider,
 a.length_of_stay AS lengthOfStay,
 DATE_FORMAT(a.requested_from, '%m/%d/%Y') AS authFromDate,
 a.requested_from AS authFromDateSort,
 DATE_FORMAT(a.requested_through, '%m/%d/%Y') AS authToDate,
 a.requested_through AS authToDateSort,
 a.pended,
  a.diagnosis AS diagnosis,
 a.diagnosis_desc AS diagDesc,
 a.auth,
a.denied,
a.excluded,
a.admit_type AS admitType,
a.service_type AS serviceType,
a.proc,
a.proc_desc AS procDesc,
a.plan 
FROM
main_table a 
INNER JOIN noitaciary noita 
ON noita.id = a.noitaciary_id 
INNER JOIN usermanagement.`user` usr 
ON a.created_by = usr.id 
AND 
CASE
  WHEN CONCAT(usr.firstname, ' ', usr.lastname) IN ('a', 'b *', 'c', 
   'd', 'd', 'f') 
  THEN 1 = 1 
  ELSE (
    COALESCE(usr.`employer`, '') NOT IN ('r', 's')
  ) 
  END 
    LEFT JOIN noitaziraa_ips AS aips 
    ON aips.noitaziraa_id = a.auth_id 
  LEFT JOIN db1.`noitaziraa_history` ah 
   ON ah.noitaziraa_id = a.noitaziraa_id 
 LEFT JOIN noitaziraa_ips_discharge AS aipsd 
  ON aipsd.noitaziraa_ips_id = aips.id 
 LEFT JOIN noitaziraa_phr AS aphr 
  ON aphr.noitaziraa_id = a.auth_id 
  LEFT JOIN noitaziraa_sp AS asp 
  ON asp.noitaziraa_id = a.auth_id 
  LEFT JOIN noitaziraa_decisions AS auth_dec 
 ON a.auth_id = auth_dec.noitaziraa_id 
 LEFT JOIN mytable AS aa 
 ON a.noitaziraa_id = aa.noitaziraa_id 
LEFT JOIN db1.dw_lookup dl 
 ON auth_dec.details = dl.code 
LEFT JOIN db1.`dw_lookup` dl1 
ON dl1.`code` = aipsd.`discharge_diposition` 
 AND dl1.`data_type` = 'dataTypeName' 
 LEFT JOIN db1.dw_lookup dl2 
 ON aa.level_of_urgency = dl2.code 
 AND dl2.data_type = 'dataTypeName1' 
LEFT JOIN 
    (SELECT 
     * 
   FROM
  (SELECT 
    hh.noitaziraa_id,
    hh.`status` 
  FROM
    db1.`noitaziraa_history` hh,
    main_table a 
  WHERE hh.noitaziraa_id = a.noitaziraa_id 
    AND hh.client = 'certainValue' 
    AND DATE(hh.last_updated) < '2017-12-01 00:00:00' 
  GROUP BY hh.`last_updated` 
  ORDER BY hh.last_updated DESC) tmp 
GROUP BY noitaziraa_id) AS tps 
ON tps.noitaziraa_id = a.noitaziraa_id 
  WHERE a.customer LIKE 'certainValue%' 
   AND a.status <> 'VOID' 

  AND DATE(auth_dec.requested_through) >= '2017-12-01 00:00:00' 
AND DATE(auth_dec.requested_through) <= '2017-12-05 00:00:00' 
AND DATE(a.opened_date) <= '2017-12-05 00:00:00' 
 AND (
 (
    DATE(ah.last_updated) BETWEEN '2017-12-01 00:00:00' 
  AND '2017-12-05 00:00:00' 
   AND ah.status IN (
    'OPEN',
    'CLOSED',
    'REOPENED',
    'CANCELED'
     )
    ) || (
    tps.noitaziraa_id = a.noitaziraa_id 
     AND tps.status IN (
    'OPEN',
    'CLOSED',
    'REOPENED',
    'CANCELED'
  )
   )
  ) 
  GROUP BY a.auth_id 
  ORDER BY groupid ASC 
  LIMIT 0, 20 
选择
a、 顾客,
a、 一分为二,,
a、 noitaziraa_id作为noitaziraaId,
日期格式(a.request_DATE,“%m/%d/%Y”)作为RequestDate,
a、 请求日期作为请求日期排序,
日期格式(noita.DATE出生日期,“%m/%d/%Y”)为dob,
noita.出生日期为dobSort,
如果(
a、 noita_类型='noita Stay',
a、 停留时间,
无效的
)按照要求,
如果(
a、 noita_类型='noita Stay',
海螺(
',',
a、 设施供应商城市,
a、 设施供应商状态
),
''
)作为一个便利的城市,
如果(
a、 noita_类型='noita Stay',
IFNULL(
日期格式(aips.admission\u日期,“%m/%d/%Y”),
''
),
''
)作为受许人,
如果(
a、 noita_类型='noita Stay',
入院日期,
''
)作为一个令人钦佩的人,
如果(
a、 noita_类型='noita Stay',
IFNULL(
日期格式(
出院日期,
“%m/%d/%Y”
),
''
),
''
)排放时,
如果(
a、 noita_类型='noita Stay',
出院日期,
''
)作为卸货港,
如果(
a、 noita_类型='noita Stay',
如果为空(dl1.`description`,''),
''
)作为排放位置,
a、 性别,,
a、 年龄,
a、 关系作为关系,,
noita.groupid,
a、 请求类型作为请求类型,
a、 程序状态作为程序状态,
dl.作为账单明细的说明,
a、 将npi称为npi,
a、 程序作为程序,
案例
当a.status='OPEN'
然后是DATEDIFF(NOW(),a.auth\u request\u date)
其他0
以“daysSinceRequest”结尾,
a、 名字作为名字,
a、 姓氏作为姓氏,
dl2.描述为紧急程度,
a、 成员id作为成员id,
a、 已将\u全名创建为createdFullName,
海螺(
',',
合并(a.分配给,空),
结合(
a、 授权审查分配的用户名,
无效的
),
结合(
a、 授权审查分配的用户名,
无效的
),
合并(分配的队列,空),
结合(
a、 授权检查指定的队列名称,
无效的
),
结合(
a、 验证控制审查分配队列名称,
无效的
)
)作为指派给,
a、 地位,
日期格式(a.打开日期,'%m/%d/%Y')作为打开日期,
a、 以openDateSort的形式打开\u日期,
日期格式(a.closed\u日期,%m/%d/%Y)作为closedDate,
a、 关闭日期为closedDateSort,
a、 noita_类型作为authType,
a、 设施供应商作为设施供应商,
a、 停留时间的长度为长度,
日期格式(a.requested_from,'%m/%d/%Y')作为authFromDate,
a、 作为authFromDateSort从请求的\u,
日期格式(a.requested通过,'%m/%d/%Y')作为authToDate,
a、 通过authToDateSort请求的\u,
a、 悬而未决,
a、 诊断就是诊断,,
a、 诊断描述作为诊断描述,
a、 啊,,
a、 否认,,
a、 排除在外,
a、 承认类型为承认类型,
a、 服务类型作为服务类型,
a、 过程,
a、 过程描述作为过程描述,
a、 计划
从…起
主表a
内连接无关节无关节
ON noita.id=a.noitaciary\u id
内部联接用户管理。`user`usr
在a.created_by=usr.id上
及
案例
当CONCAT(usr.firstname,,,usr.lastname)位于('a','b*','c',时,
‘d’、‘d’、‘f’)
那么1=1
否则(
合并(usr.'employer','')不在('r','s')中
) 
结束
左加入noitaziraa_ips作为AIP
关于aips.noitaziraa_id=a.auth_id
左连接db1。`noitaziraa__history`ah
关于ah.noitaziraa_id=a.noitaziraa_id
左连接noitaziraa_ips_放电为aipsd
在aipsd.noitaziraa_ips_id=aips.id上
左连接noitaziraa_phr作为aphr
关于aphr.noitaziraa_id=a.auth_id
左连接noitaziraa_sp作为asp
在asp.noitaziraa_id=a.auth_id上
左加入noitaziraa_决策为auth_dec
在a.auth_id=auth_dec.noitaziraa_id上
将mytable作为aa左键联接
关于a.noitaziraa_id=aa.noitaziraa_id
左连接db1.dw_查找dl
关于auth_dec.details=dl.code
左连接db1.`dw_lookup`dl1
在dl1上,`code`=aipsd.`disposition`
和dl1.`data_type`='dataTypeName'
左连接db1.dw_查找dl2
在aa.level\u of\u紧迫性=dl2.code上
和dl2.data_type='dataTypeName1'
左连接
(选择
* 
从…起
(选择
hh.noitaziraa_id,
hh.‘状态’
从…起
db1.`noitaziraa_历史`hh,
主表a
其中hh.noitaziraa_id=a.noitaziraa_id
和hh.client='certainValue'
日期(hh.上次更新)<'2017-12-01 00:00:00'
按hh分组。`last_updated`
由hh.last_更新描述)tmp订购
由noitaziraa_id)作为tps分组
关于tps.noitaziraa_id=a.noitaziraa_id
其中a.客户喜欢“certainValue%”
a.状态“无效”
和日期(授权请求的12月通过)>=“2017-12-01 00:00:00”

和日期(通过请求的授权日期)这需要逐步解决

        SELECT  *
            FROM  
            (
                SELECT  hh.noitaziraa_id, hh.`status`
                    FROM  db1.`noitaziraa_history` hh, main_table a
                    WHERE  hh.noitaziraa_id = a.noitaziraa_id
                      AND  hh.client = 'certainValue'
                      AND  DATE(hh.last_updated) <  '2017-12-01 00:00:00'
                    GROUP BY  hh.`last_updated`
                    ORDER BY  hh.last_updated DESC
            ) tmp
            GROUP BY  noitaziraa_id
换成

AND hh.last_updated < '2017-12-01'
同时,您可能有一个严重的错误:为什么在这个子查询和外部区域都指定了
main_表a
?那是个错误吗

      AND DATE(auth_dec.requested_through) >= '2017-12-01 00:00:00'
      AND DATE(auth_dec.requested_through) <= '2017-12-05 00:00:00'
LEFT JOIN
——除非需要,否则不要使用它。您不需要其中的一些,这可以通过引用
WHERE
子句中的
auth_dec
发现

dl
dl1
dl2
——它们位于
左连接链的末端。删除它们,并删除对其中列的引用。然后添加一个额外的
选择
层,在按
限制进行
排序后,将其伸入其中。这将使参考文献的数量从“批次”减少到只有20个

EXPLAIN
显示了一个表
案件量
;查询没有这样的属性。请修理

并修复
打字错误


我现在退出。

这需要逐步解决

        SELECT  *
            FROM  
            (
                SELECT  hh.noitaziraa_id, hh.`status`
                    FROM  db1.`noitaziraa_history` hh, main_table a
                    WHERE  hh.noitaziraa_id = a.noitaziraa_id
                      AND  hh.client = 'certainValue'
                      AND  DATE(hh.last_updated) <  '2017-12-01 00:00:00'
                    GROUP BY  hh.`last_updated`
                    ORDER BY  hh.last_updated DESC
            ) tmp
            GROUP BY  noitaziraa_id
换成

AND hh.last_updated < '2017-12-01'
同时,您可能有一个严重的错误:为什么在这个子查询和外部区域都指定了
main_表a
?那是个错误吗

      AND DATE(auth_dec.requested_through) >= '2017-12-01 00:00:00'
      AND DATE(auth_dec.requested_through) <= '2017-12-05 00:00:00'
LEFT JOIN
——除非需要,否则不要使用它。您不需要其中的一些,这可以通过引用发现
    LEFT JOIN  noitaziraa_phr AS aphr  ON aphr.noitaziraa_id = a.auth_id
    LEFT JOIN  noitaziraa_sp AS asp  ON asp.noitaziraa_id = a.auth_id
    INNER JOIN db1.`noitaziraa_history` ah 
    ON ah.noitaziraa_id = a.noitaziraa_id AND  hh.client = 'certainValue' AND  DATE(hh.last_updated) <  '2017-12-01 00:00:00'