Запрос SQL Server Count занимает слишком много времени
Я немного запутался в SQL Server или SQLSRV
библиотека с подсчетом запросов.
Пожалуйста, рассмотрите этот код:
<?php
$sql=<<<SQL
SELECT id,
...
FROM ...
WHERE ....
SQL;
$serverName = "sqlserver";
$connectionInfo = array( "Database"=>"mydb", "UID"=>"myuser", "PWD"=>"mupwd" );
$conn = sqlsrv_connect( $serverName, $connectionInfo);
if( $conn === false ) {
die( print_r( sqlsrv_errors(), true));
}
$time=microtime(true);
$params = array();
$options = array( "Scrollable" => SQLSRV_CURSOR_KEYSET );
$stmt = sqlsrv_query( $conn, $sql, $params, $options);
if( $stmt === false ) {
die( print_r( sqlsrv_errors(), true));
}
echo "Result: ".sqlsrv_num_rows($stmt)."<br>\r\n";
echo "Time for sqlsrv_num_rows: ".(microtime(true)-$time)."s<br>\r\n";
$countsql=<<<SQL
SELECT COUNT(id) FROM (
$sql
) counter
SQL;
$time=microtime(true);
$stmt = sqlsrv_query( $conn, $countsql);
if( $stmt === false ) {
die( print_r( sqlsrv_errors(), true));
}
echo "Result: ".array_pop(sqlsrv_fetch_array($stmt,SQLSRV_FETCH_NUMERIC))."<br>\r\n";
echo "Time for count-query and one-row sqlsrv_fetch_array: ".(microtime(true)-$time)."s<br>\r\n";
Это мой результат:
Result: 2332
Time for sqlsrv_num_rows: 0.18062806129456s
Result: 2332
Time for count-query and one-row sqlsrv_fetch_array: 14.647264957428s
Тот же результат с двумя методами (sqlsrv_num_rows
на основной запрос или sqlsrv_fetch_array
в запросе счета) занимает 0,18 или 14 с.
Пожалуйста, не заботьтесь о запросе, это запрос с плохо проиндексированной таблицей из многих тысяч строк, но я не могу отредактировать таблицу, запрос или индексы, так что я пытаюсь понять, почему счет в запросе такой большой против счетчика в курсоре.
Более того, я попытался выполнить запрос подсчета в клиенте SQL Server Management Studio, и это заняло очень мало времени (<1 с), как в моем первом тесте. Так что мне интересно, если это может быть SQLSRV
вопрос библиотеки.