SQL занимает слишком много

По какой-то причине мой сценарий занимает слишком много времени, поэтому мне пришлось добавить ini_set('max_execution_time', 300); так как 30 секунд по умолчанию принесли мне фатальную ошибку.

Я не могу понять, почему это происходит, если я иду непосредственно в SSMS, я получаю этот запрос в 0 секунд. что может происходить? я использую wamp с php 5.4.16 и расширением php_sqlsrv_54_ts

<?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);

?>

1

Решение

попробуйте изменить ваш запрос следующим образом:

Примечание: вы делаете «где f0b.Order_Id = f1.Id», тогда ваше левое соединение отменяется, потому что вы проверяете значение (вот почему я заменил внутреннее соединение), если вы также хотите нулевое значение, вы должны сделать это: ‘ где f0b.Order_Id = f1.Id или f0b.Order_Id равен нулю ‘

Select
Id
,Cliente
,Contrato
,Anexo
,SO
,NombreFlota
,isnull(f3.NbProdLive, 0)  as Hechas
,isnull(f2.NbProd, 0) - isnull(f3.NbProdLiveRMANull, 0) as Pendientes
,isnull(f2.NbProd, 0) as Total
FROM
Orders f1
outer apply
(
select count(*) NbProd from Producto f0
where f0.Order_Id=f1.Id

) f2

outer apply
(
select count(*) NbProdLive, sum(case when RMA is null then 1 else 0 end) NbProdLiveRMANull
from LiveTest f0 INNER JOIN Producto f0b ON f0b.Id=f0.Producto_Id
where f0b.Order_Id=f1.Id

) f3
WHERE f1.FechaPick is not null and (isnull(f2.NbProd, 0) - (isnull(f2.NbProd, 0) - isnull(f3.NbProdLiveRMANull, 0))) >0
ORDER BY $sort $order
0

Другие решения

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector