select ca.patient_id, ca.card_number
from base.T_DCH_PATIENT_CARD ca
where ca.id in (select max(aa.id) as bid
from base.T_DCH_PATIENT_CARD aa
where aa.card_type = 4
and aa.card_state = 1
and aa.patient_id = ca.patient_id
group by aa.patient_id)
and ca.hosp_id = 1517
这条sql语句,在oracle 2秒出结果,在tidb 查询很慢很慢
SELECT
max( id ),
patient_id,
card_number
FROM
base.T_DCH_PATIENT_CARD
WHERE
card_type = 4
AND card_state = 1
AND hosp_id = 1517
GROUP BY
patient_id;
默认的sql_mode格式下,将SQL改写为如下格式:
SELECT
t.id,
t.patient_id,
t.card_number
FROM
base.T_DCH_PATIENT_CARD t
WHERE
t.id IN (
SELECT
max( id ) AS id
FROM
base.T_DCH_PATIENT_CARD
WHERE
card_type = 4
AND card_state = 1
AND hosp_id = 1517
GROUP BY
patient_id
)
你这个sql在tidb上走tiflash肯定是有问题的,建议hint指定不走tiflash试试,另外sql可以改写成这个看看
select patient_id,card_number from
(
select patient_id,card_number,rank() over (partition by patient_id order by id desc) row_num
from base.T_DCH_PATIENT_CARD ca
where ca.card_type = 4
and ca.card_state = 1
and ca.hosp_id = 1517)
where row_num=1
;