SELECT
S.*
FROM
(
SELECT
@ROWNUM := @ROWNUM + 1 AS ROW_INDEX,
A.TASK_NO,
IFNULL(A.ORDR_NO, "") AS ORDR_NO,
B.MBR_NM,
(
SELECT
TCCD.CMM_CD_NM
FROM
TB_CMM_CD_M TCCM
INNER JOIN TB_CMM_CD_D TCCD ON
TCCM.GRP_CD = TCCD.GRP_CD
AND TCCM.GRP_CD = 'TKC'
WHERE
A.TASK_KD_DIVS_CD = TCCD.CMM_CD) AS TASK_KD_DIVS_NM,
D.JNCO_NM,
D.BR_NM,
A.MGR_NM,
IFNULL(DATE_FORMAT(A.TASK_RSV_DTTM, '%Y.%m.%d %H:%i'), "") AS TASK_RSV_DTTM,
IFNULL(DATE_FORMAT(( SELECT MAX(TASK_PRSS_DTTM) FROM TB_TASK_FFIL_H e WHERE A.TASK_NO = e.TASK_NO AND e.TASK_PRSS_STUS_DIVS_CD = '003') , '%Y.%m.%d %H:%i'), "") AS TASK_PRSS_DTTM, /*종료일시*/
IFNULL(DATE_FORMAT(A.REG_DTTM, '%Y.%m.%d %H:%i'), "") AS REG_DTTM,
(
SELECT
TCCD.CMM_CD_NM
FROM
TB_CMM_CD_M TCCM
INNER JOIN TB_CMM_CD_D TCCD ON
TCCM.GRP_CD = TCCD.GRP_CD
AND TCCM.GRP_CD = 'TPD'
WHERE
A.TASK_PRSS_STUS_DIVS_CD = TCCD.CMM_CD) AS TASK_PRSS_STUS_DIVS_NM
FROM
TB_TASK_M A
INNER JOIN TB_MBR_M B ON
A.MBR_SNO = B.MBR_SNO
INNER JOIN TB_MGR_M C ON
A.MGR_ID = C.MGR_ID
INNER JOIN (
SELECT
CASE
WHEN E.JNCO_NM IS NULL THEN F.JNCO_NM
ELSE E.JNCO_NM
END AS JNCO_NM ,
CASE
WHEN E.JNCO_NM IS NULL THEN E.JNCO_NM
ELSE F.JNCO_NM
END AS BR_NM ,
F.JNCO_MNGR_SNO
FROM
TB_JNCO_MNGR_M E
INNER JOIN TB_JNCO_MNGR_M F ON
E.JNCO_MNGR_SNO = F.HPOS_JNCO_MNGR_SNO ) D
ON C.JNCO_MNGR_SNO = D.JNCO_MNGR_SNO
CROSS JOIN (
SELECT
@ROWNUM := 0) R
WHERE
1 = 1
AND A.TASK_RSV_DTTM BETWEEN concat('20210725','000000') AND concat('20210825','235959')
ORDER BY A.REG_DTTM ASC
) S
ORDER BY
S.ROW_INDEX DESC
LIMIT 0, 10
ROW_INDEX는 화면에보여줄 행번호인데 이걸 정렬하느라 속도저하가 나는거 같은데..필요합니다..
한번에 전체행을 불러와서 문제가되는거같은데..
다른방법이있을까요?도움부탁드립니다.
LIMIT 에 10은 보여줄 행 갯수이고 0은 페이지가 올라갈떄마다 10,20,30으로증가합니다.
번호 부여 정렬기준과 페이징 처리 정렬기준이 서로 정 반대네요.
번호 부여를 위해 전체 자료를 정렬하고
10건을 가지고 오기 위해 다시 거꾸로 정렬하네요.
번호 부여가 반드시 필요한지 의문입니다. 왜 필요하죠?
MySQL 버전이 어떻게 되나요?
MySQL 8.0 부터 순위 분석함수 사용이 가능합니다.
메인인 A 와 조인하는 다른 부수적인 테이블들은 모두 1:1 관계인가요?
전부 조인하고 서브쿼리로 코드정보 가져오고 한 다음에 페이징하지 말고
A 만 가지고 페이징 처리한 후에 페이징 결과 10건에 대해서만 기타 정보들을 조인해서 가져오세요.
SELECT a.row_index , a.task_no , IFNULL(a.ordr_no, '') ordr_no , b.mbr_nm , (SELECT tccd.cmm_cd_nm FROM tb_cmm_cd_m tccm INNER JOIN tb_cmm_cd_d tccd ON tccm.grp_cd = tccd.grp_cd AND tccm.grp_cd = 'TKC' WHERE tccd.cmm_cd = a.task_kd_divs_cd ) task_kd_divs_nm , CASE WHEN e.jnco_nm IS NULL THEN f.jnco_nm ELSE e.jnco_nm END jnco_nm , CASE WHEN e.jnco_nm IS NULL THEN e.jnco_nm ELSE f.jnco_nm END br_nm , a.mgr_nm , DATE_FORMAT(a.task_rsv_dttm, '%Y.%m.%d %H:%i') task_rsv_dttm , (SELECT IFNULL(DATE_FORMAT(MAX(e.task_prss_dttm), '%Y.%m.%d %H:%i'), '') FROM tb_task_ffil_h e WHERE e.task_prss_stus_divs_cd = '003' AND e.task_no = a.task_no ) task_prss_dttm , DATE_FORMAT(a.reg_dttm, '%Y.%m.%d %H:%i') reg_dttm , (SELECT tccd.cmm_cd_nm FROM tb_cmm_cd_m tccm INNER JOIN tb_cmm_cd_d tccd ON tccm.grp_cd = tccd.grp_cd AND tccm.grp_cd = 'TPD' WHERE tccd.cmm_cd = a.task_prss_stus_divs_cd ) task_prss_stus_divs_nm FROM (SELECT * FROM (SELECT @rownum := @rownum + 1 row_index , task_no , ordr_no , task_kd_divs_cd , mgr_nm , task_rsv_dttm , reg_dttm , task_prss_stus_divs_cd FROM tb_task_m CROSS JOIN (SELECT @rownum := 0) r WHERE task_rsv_dttm BETWEEN CONCAT('20210725','000000') AND CONCAT('20210825','235959') ORDER BY reg_dttm ) a ORDER BY row_index DESC LIMIT 0, 10 ) a INNER JOIN tb_mbr_m b ON a.mbr_sno = b.mbr_sno INNER JOIN tb_mgr_m c ON a.mgr_id = c.mgr_id INNER JOIN tb_jnco_mngr_m f ON c.jnco_mngr_sno = f.jnco_mngr_sno INNER JOIN tb_jnco_mngr_m e ON e.jnco_mngr_sno = f.hpos_jnco_mngr_sno ;