【发布时间】:2017-11-15 22:34:59
【问题描述】:
我的 MS SQL Server 查询使用了很多子查询,当在具有近 10000000 大数据的服务器上运行时,它需要永远执行。我需要一种更好的方法来重建查询以使其更快。
这里是查询:
<?php
$query = "SELECT ".$limitresult." * FROM customer c INNER JOIN (SELECT MIN(ac_no) ac_no
FROM loans where full_paid ='0' GROUP BY ac_no) AS l ON c.cust_no = l.ac_no and
cust_type = 'BUS' ".$branchid." ".$accnos." ";
$check = @sqlsrv_query($conn, $query);
$i = 1;
while($rows = @sqlsrv_fetch_array( $check, SQLSRV_FETCH_ASSOC)) {
$que22 = "select * from company";
$checks22 = sqlsrv_query($conn, $que22);
$row22 = @sqlsrv_fetch_array($checks22, SQLSRV_FETCH_ASSOC);
$comi = $row22['branch'];
$ques = "select BRSES_DATE from company";
$checks22y = sqlsrv_query($conn, $ques);
$row22y = sqlsrv_fetch_array($checks22y, SQLSRV_FETCH_ASSOC);
$dat = @$row22y['BRSES_DATE']->format('Y-m-d H:m:i');
$iu = $rows['cust_no'];
$qur = "SELECT Member.Branch,Member.GL_No,Member.Ac_NO,Member.BRANCH+Member.GL_NO+Member.AC_NO AS BRGLAC,Customer.Cust_No,Customer.Name,Group_Name,ID_CARD,Subgroup as subgroup2,Cust_Type,Cust_Sex,Cust_Cat,Area_Code,Cust_Type,Dobirth,Address,Ref_No,Bank_VNO,Cust_Ca2,nType,Group_Code FROM Member INNER JOIN CUSTACC ON Member.Branch = CustAcc.Branch AND cust_no='$iu' AND Member.GL_NO = CustACC.GL_No AND Member.AC_NO = CustACC.AC_No INNER JOIN Customer ON Member.Branch = Customer.Branch AND Member.Cust_No = Customer.Cust_No WHERE CUSTACC.Exp_Date < '$dat' AND Member.Branch = '$comi' AND MEMBER.Gl_NO IN (SELECT Coa.GL_NO FROM Coa WHERE Product = 'S' )";
$che = sqlsrv_query($conn, $qur);
$roe = @sqlsrv_fetch_array($che, SQLSRV_FETCH_ASSOC);
$c = $rows['cust_no'];
$ret ="select * from fssign where cust_no='$c'";
$c = sqlsrv_query($conn, $ret);
$r = sqlsrv_fetch_array($c, SQLSRV_FETCH_ASSOC);
//$cod = $r['bus_type'];
?>
【问题讨论】:
-
连接几乎总是比子查询快
-
先把你正在使用的rdbms产品弄对。不是mysql,而是ms sql server。
-
发布您的主要查询并获取执行时间
-
@rtfm,正是我需要专家帮助我进行更好优化的原因。
-
还是php太多了,你的问题应该只有t-sql语句你这里有t-sql语句,你有什么问题?也只是 t-sql 没有 php。
标签: php sql sql-server