0

我有一个 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`
4

2 回答 2

1

没有比这更好的了,检查您查找的每个值(包括连接)是否都有索引,并且您没有对每个项目运行查询,确保您请求所有项目(与当前页面),然后在客户端处理它们。

基本上,这不是查询问题,而是您的代码使用查询结果或数据库设计(或网络,但这很可能超出您的控制范围)。

我觉得我也应该提到那行代码中明显的安全漏洞,但我相信你明白了很多。

编辑:我实际上想到了一些事情,如果这些字段不是varchar,您应该将rtrim()它们放在服务器端,而不是在每列的末尾发送数千个(或更多)空格。

于 2012-02-29T15:29:45.553 回答
1

你可能没有比这更好的了。我在数据库课程中的教授曾经说过“不要试图变得聪明。RDMS 擅长优化”——除了一件事,RDMS 不会自动设置索引。因此,请确保您在要排序、加入和选择的那些字段上有索引(选择类似于“where”子句中的选择)。

于 2012-02-29T16:37:11.060 回答