2017-04-10 39 views
0

你好,這裏是mysql的查詢。如何加快我的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

這是mysql還是sql-server?兩者都非常不同 – GuidoG

+0

您使用的是MySQL還是MS SQL Server?不要標記不涉及的產品。 – jarlh

+0

表格的索引如何? –

回答

1

1)上vRefReceipt,iBillNo指數,vItemCode

2)使子查詢作爲一個臨時表或CTE(公用表表示),然後從它選擇。

0

剛:

做一個索引我們所有的primary key,直接用於您的查詢,然後模擬它需要多長時間低於beforeafter