你好,这里是mysql查询。
SELECT pbi.iBillItemID,
pbi.vItemCode,
pbi.vDescription,
if(
pb.iLab = 0,
pbi.iQty,
( pbi.iQty
- ifnull(
(SELECT sum(p_bi.iQty)
FROM patientbillitem p_bi, patientbillpayment p_b
WHERE p_bi.vRefReceipt = p_b.vReceiptNo
AND p_b.iBillNo = p_iBillNo
AND p_bi.vItemCode = pbi.vItemCode),
0)))
iQty
FROM patientbillitem pbi,
patientbillpayment pb,
patient_service ps,
patient_service_category psc
WHERE pbi.iBillNo = pb.iBillNo
AND pb.iBillNo = p_iBillNo
AND pbi.vItemCode = ps.iServiceID
AND ps.iCategoryID = psc.Asc_ID
AND pbi.iPatID = p_iPatID
上面的mysql查询执行实际上减慢了p_bi.vItemCode = pbi.vItemCode在此查询中使用的是varchar字段,这就是为什么执行它花费太多时间的原因,我尝试在此列上添加全文本索引,然后它运行得非常快,但问题已解决文本索引仅支持常量字符串。谁能给我这个查询的解决方案谢谢。
最佳答案
1)在vRefReceipt,iBillNo,vItemCode上的索引
2)使子查询成为临时表或CTE(公用表表达式),然后从中选择。