如何加快我的mysql查询?

时间:2017-04-10 08:09:51

标签: mysql sql

你好这里是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字段,这就是为什么它需要花费太多时间来执行我尝试在这个列上添加全文索引然后它工作得非常快但是问题是全文索引只支持常量字符串。任何人都可以给我这个查询的解决方案谢谢。

2 个答案:

答案 0 :(得分:1)

1)vRefReceipt索引,iBillNo,vItemCode

2)将子查询作为临时表或CTE(公用表表达式),然后从中进行选择。

答案 1 :(得分:0)

只需:

为我们查询使用的所有primary key制作一个索引,然后模拟所需的时长比beforeafter