我有一个MySQL sql查询,如下所示。
使用解释,我可以看到表‘cl_tiss_consulta’(别名BBB)和表‘cl_tiss_sadt’(别名CCC)正在使用一个完整的扫描显示所附图片。
对于那个表(cl_tiss_consulta和cl_tiss_sadt),我已经在'data_fat‘列上有了一个索引'ix_data_fat’
如何将此查询此表更改为使用索引?
// MySQL sql查询
SELECT
A.id AS histo_id,
DATE_FORMAT(A.horaent, '%d/%m/%Y %H:%i') AS horaent,
C.cpf,
KK.nome AS nomeconv,
LL.nome AS nomeplano,
B.nome AS nomemed
FROM
cl_histo A
JOIN
cl_clientes C ON C.id = A.cliente_id
JOIN
cl_staff_nh B ON B.id = A.med_id
LEFT JOIN
cl_planos LL ON LL.id = A.plano_id
LEFT JOIN
cl_convenio KK ON KK.id = LL.conv_id
WHERE
A.horaent >= '2022-04-08'
AND A.horaent < '2022-04-09'
AND A.deleted <> 1
AND NOT (EXISTS( SELECT
1
FROM
cl_tiss_consulta BBB
WHERE
BBB.cliente_id = A.cliente_id
AND BBB.data_fat >= DATE(A.horaent)
AND BBB.data_fat < DATE_ADD(DATE(A.horaent),
INTERVAL 1 DAY))
or
EXISTS( SELECT
1
FROM
cl_tiss_sadt CCC
WHERE
CCC.cliente_id = A.cliente_id
AND CCC.data_fat >= DATE(A.horaent)
AND CCC.data_fat < DATE_ADD(DATE(A.horaent),
INTERVAL 1 DAY))
)
发布于 2022-04-09 02:09:57
这两个表上的(cliente_id, data_fat)
需要多个索引。在第一列上筛选相等,在第二列上筛选日期时间范围,因此两列BTREE索引非常适合这种情况。
https://stackoverflow.com/questions/71803516
复制相似问题