Запрос занимает много времени с php eloquent и sqlserver - PullRequest
0 голосов
/ 03 сентября 2018

Я столкнулся с некоторыми проблемами при использовании SQL Server с PHP, у меня есть этот запрос в моем коде.

  Api::$eloquent->connection('cis')->select("
    SELECT
        SUM (DET.Peso_Salida) AS total,
      CLI.[Codigo Grupo] AS grupo
    FROM
        BNF2.SECO_DEVOLUCION_DETALLE AS DET
    INNER JOIN BNF2.SECO_DEVOLUCION_MAESTRO AS MAS ON DET.Correlativo_Maestro = MAS.Correlativo_Maestro AND MAS.Codigo_Cosecha=:co1
    INNER JOIN BNF.DETALLES_GENERALES_PESOS_2 AS REC ON DET.Numero_Lote=REC.Numero_Lote AND REC.Codigo_Cosecha=:co2
    INNER JOIN BNF.V_CLIENTES_CON_GRUPO AS CLI ON REC.Codigo_Entidad_Cliente_Actual= CLI.Codigo
    GROUP BY CLI.[Codigo Grupo]  
    ", [':co1' => $this->cosecha, ':co2' => $this->cosecha]);

Запрос занимает 15 с, а SQL Server имеет 100% CPU, теперь, если я удаляю параметры в коде, запрос выполняется очень быстро, 103 мс, поэтому я не понимаю, почему параметры замедляют запрос

Api::$eloquent->connection('cis')->select("
SELECT
    SUM (DET.Peso_Salida) AS total,
  CLI.[Codigo Grupo] AS grupo
FROM
    BNF2.SECO_DEVOLUCION_DETALLE AS DET
INNER JOIN BNF2.SECO_DEVOLUCION_MAESTRO AS MAS ON DET.Correlativo_Maestro = MAS.Correlativo_Maestro AND MAS.Codigo_Cosecha=9
INNER JOIN BNF.DETALLES_GENERALES_PESOS_2 AS REC ON DET.Numero_Lote=REC.Numero_Lote AND REC.Codigo_Cosecha=9
INNER JOIN BNF.V_CLIENTES_CON_GRUPO AS CLI ON REC.Codigo_Entidad_Cliente_Actual= CLI.Codigo
GROUP BY CLI.[Codigo Grupo]
", []);

Это очень хорошо, любая идея?

1 Ответ

0 голосов
/ 04 сентября 2018

Вы должны использовать параметризованный запрос или процедуру хранения.

Может быть несколько причин для медленного выполнения запроса. Только Table info (включая тип данных и длину) и Query Plan могут только показать.

Индекс является одним из них.

Так как ваш вопрос похож на "when using variable then query is slow. Query perform ok with constant value"

Мы обсуждаем подобное несколько дней назад.

Переменные ухудшают производительность запросов

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...