sql 优化问题

健康度我把这几个表都执行了EXPLAIN analyze table 表名

现在是插入不得行,查询还能查询出来,插入要卡死。

我感觉查询还查询的出来,就是插入不得行,要卡死。

查看 tikv 关键的参数,是不是 磁盘 IO 能力或者 CPU 有瓶颈

通过prometheus 监控

另外可以通过 Dashboard 查阅热点,如果有热点,也会有很大的问题

select
pat.FILE_NUMBER,
pat.patient_name,
– 病人姓名
pat.GENDER_CODE ,
– 性别代码
pat.ID_TYPE ,
– 证件类型
pat.ID_NUMBER ,
– 证件号码
date(pat.BIRTH_DATE) as BIRTH_DATE
– 出生日期
from
yiliao.TB_CIS_PATIENT_INFO pat
##use index(PRIMARY)
where
FILE_NUMBER in (
select
FILE_NUMBER
from
yiliao.TB_CIS_OP_PRESCRIPTION_DETAIL mx
where
mx.PRE_TIME >= ‘2021-01-01 00:00:00’
and mx.PRE_TIME < ‘2021-01-31 23:59:59’
)

感觉在这一部分上面有点慢,这个子查询的值你实际看下是不是数据量很大。

select count(1) from yiliao.TB_CIS_OP_PRESCRIPTION_DETAIL mx
where mx.PRE_TIME >= ‘2021-01-01 00:00:00’ and mx.PRE_TIME < ‘2021-01-31 23:59:59’

日期越长数据量就大,要是一周内数据量不大。

看PRE_TIME 还是个主键,执行计划也已经走了索引了,时间越长 数据量越大,肯定时间相对来说长一些吧,

有时1分钟都查询不出来数据呢。这个也太长了。

你把这部分改造成关联查询再试试,一旦这个子查询的数据量太大,这里必定会非常慢。

关联查询是指分sql 查询吗?

改成这样跑个执行计划看看。

select
pat.FILE_NUMBER,
pat.patient_name,
pat.GENDER_CODE ,
pat.ID_TYPE ,
pat.ID_NUMBER ,
date(pat.BIRTH_DATE) as BIRTH_DATE
from
yiliao.TB_CIS_PATIENT_INFO pat, (select FILE_NUMBER from yiliao.TB_CIS_OP_PRESCRIPTION_DETAIL mx where mx.PRE_TIME >= ‘2021-01-01 00:00:00’ and mx.PRE_TIME < ‘2021-01-31 23:59:59’) zzz
where pat.FILE_NUMBER=zzz.FILE_NUMBER

你这不是快了很多 31天才3秒就查出来了