[英]SQL query optimization (Pervasive)
我有一個PHP應用程序,它根據掃描/輸入的訂單號提取訂單信息,以便進行訂單提取。 我們使用的是Pervasive SQL,但語法與MS SQL完全相同。
我有幾個較小的查詢用於將套件項目分解為根據需要調用的組件項目,但它們執行起來簡單快捷。 我的問題是我們的主要查詢,即最需要的信息被填入。 大多數訂單都很快,因為它們相對較小(1-15件左右)。 我的問題是大訂單(例如批發)可能最終成為100多件商品。
我意識到需要的信息越多,執行查詢所需的時間就越長,但我希望我的查詢中還有空間來進一步優化它。
有沒有人在下面的查詢中看到我可以優化的任何內容,以加快大訂單的速度?
SELECT
oeordh.orduniq,
oeordh.customer,
oeordh.ordnumber,
oeordh.orddate,
oeordh.salesper1,
oeordd.orduniq,
oeordd.item,
oeordd.pickseq,
oeordd.location,
oeordd.origqty,
arcus.idcust,
arcus.idgrp
FROM oeordh
INNER JOIN oeordd ON oeordh.orduniq = oeordd.orduniq
INNER JOIN arcus ON oeordh.customer = arcus.idcust
WHERE
oeordh.ordnumber = '".$_POST['barcode']."'
ORDER BY oeordd.pickseq`
你不能比這更好,檢查你查找的每個值(包括連接)是否有索引,並且你沒有為每個項目運行查詢,請確保你請求所有項目(與之相關的)當前頁面)然后在客戶端處理它們。
基本上,它不是查詢問題,它可能是您的代碼使用查詢結果或數據庫設計(或網絡,但這很可能是您無法控制的)。
我覺得我應該在這行代碼中提到明顯的安全漏洞,但我相信你會得到很多。
編輯:我實際上想到了一些東西,如果這些字段不是varchar
,你應該在服務器端rtrim()
它們而不是在每一列的末尾發送成千上萬的(或更多)空格。
你可能不會比這更好。 我在數據庫課程中的教授曾經說過“不要試圖變得聰明.RTMS擅長優化” - 除了一件事,RDMS不會自動設置索引。 因此,請確保您在要排序的那些字段上有索引,加入並選擇(在“where”子句中選擇)。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.