【发布时间】:2017-08-16 17:03:44
【问题描述】:
由于某种原因,我的脚本花费了太多时间,这就是为什么我不得不添加 ini_set('max_execution_time', 300);,因为默认 30 秒给我带来了致命错误。
我不明白为什么会这样,如果我直接进入 SSMS,我会在 0 秒内得到该查询。会发生什么?我正在使用 php 5.4.16 和扩展名 php_sqlsrv_54_ts 运行 wamp
<?php
error_reporting(E_ALL ^ E_DEPRECATED);
ini_set('max_execution_time', 300);
include "ChromePhp.php";
$sort = isset($_POST['sort']) ? strval($_POST['sort']) : 'Cliente';
$order = isset($_POST['order']) ? strval($_POST['order']) : 'DESC';
include "includes/db_config.php";
$conn = sqlsrv_connect(SV_NAME, $connectionInfo) OR die("Unable to connect to the database");
$sql =
"SELECT * FROM
(Select
Id
,Cliente
,Contrato
,Anexo
,SO
,NombreFlota
,(SELECT count(*) FROM LiveTest LEFT JOIN Producto ON Producto.Id=LiveTest.Producto_Id WHERE Producto.Order_Id=Orders.Id) as Hechas
,((SELECT count(*) FROM Producto WHERE Order_Id=Orders.Id) - (SELECT count(*) FROM LiveTest LEFT JOIN Producto ON Producto.Id=LiveTest.Producto_Id WHERE Producto.Order_Id=Orders.Id and RMA is null )) as Pendientes
,(SELECT count(*) FROM Producto WHERE Order_Id=Orders.Id ) as Total
FROM
Orders
WHERE
Orders.FechaPick is not null) as A
WHERE Total - Pendientes >0
ORDER BY $sort $order";
ChromePHP::log($sql);
$params = array();
$options = array( "Scrollable" => SQLSRV_CURSOR_KEYSET );
$result = array();
$res = sqlsrv_query($conn, $sql, $params, $options);
while($row = sqlsrv_fetch_object($res))
{
array_push($result, $row);
}
ChromePHP::log($result);
echo json_encode($result);
?>
【问题讨论】:
-
你如何在 ssms 中传递这些值
ORDER BY $sort $order -
我觉得这是参数嗅探问题:阅读这篇文章了解更多信息:Slow in the Application, Fast in SSMS?
-
@TheGameiswar 我只是省略了它们,但如果我放置它们没有区别
-
这有很大的不同,如果一个订单没有很好的索引来支持,它会花费很多
-
出于示例目的,尝试使用您从应用程序传递的各种值运行,它将帮助您理解
标签: php sql-server wamp