Очень медленный запрос с использованием JDatabase vs Manual

У меня есть простой запрос, который занимает почти минуту, используя JDatabase, но занимает менее секунды, когда я использую sqlsrv_connect.

    $time_pre = microtime(true);

    $conn_array = array (
        "Database" => "Test",
    );
    $conn = sqlsrv_connect('SQL01\SQL01', $conn_array);
    if ($conn) {
        $result = array();
        if (($qryresult = sqlsrv_query($conn,"SELECT e.*, c.Description AS Cell FROM Edms AS e LEFT JOIN Cells AS c ON c.ID=e.Cell_ID")) !== false) {
            while( $row = sqlsrv_fetch_array($qryresult, SQLSRV_FETCH_ASSOC) ) {
                $result[] = $row;
            }
        }
    }
    else {
        die(print_r(sqlsrv_errors(), true));
    }

    $time_post = microtime(true);
    $exec_time = $time_post - $time_pre;
    echo 'Time manual: '.$exec_time.'<br>';
    $time_pre = microtime(true);

    $db = $this->getDbo();
    $query = $db->getQuery(true);

    $query->select('e.*, c.Description AS Cell FROM Edms AS e LEFT JOIN Cells AS c ON c.ID=e.Cell_ID');

    $db->setQuery($query);
    $result = $db->loadRowList();

    $time_post = microtime(true);
    $exec_time = $time_post - $time_pre;
    echo 'Time Joomla: '.$exec_time.'<br>';
    $time_pre = microtime(true);

    JFactory::getApplication()->close();

:

  

Руководство по времени: 0.046799182891846
  Время Joomla: 51.681474924088

Любые идеи о том, что здесь происходит?

Я сузил его до функции fetchArray(), которая JDatabase, вызывающий sqlsrv_fetch_array, и каждая строка результата занимает до 2 секунд! Похоже, что это делает то же самое, что и моя версия для руководства, но я не знаю, почему огромная разница в сроках.

Я также пробовал $db->loadObjectList() и $db->loadAssocList(), но получите тот же результат.

1 голос | спросил doovers 18 J0000006Europe/Moscow 2015, 07:14:21

1 ответ


1

Прежде всего, вы строите свой запрос неправильно. Он должен выглядеть следующим образом:

$query = $db->getQuery(true);
$query->select('e.*, c.Description AS Cell');
$query->from('Edms AS e');
$query->leftJoin('Cells AS c ON c.ID=e.Cell_ID');
ответил Artur Stępień 3 J000000Friday15 2015, 18:43:45

Похожие вопросы

Популярные теги

security × 330linux × 316macos × 2827 × 268performance × 244command-line × 241sql-server × 235joomla-3.x × 222java × 189c++ × 186windows × 180cisco × 168bash × 158c# × 142gmail × 139arduino-uno × 139javascript × 134ssh × 133seo × 132mysql × 132