[英]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.