Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

sqlsrv_fetch_array - слишком медленная обработка запроса

5.3K
19 июля 2010 года
Bear Deon
82 / / 20.01.2007
Вытаскиваю 300 тыс. строк из БД MS SQL с помощью sqlsrv_fetch_array. Обработка в sqlsrv_fetch_array занимает где-то 4 минуты, что довольно таки долго, по сравнению в MS Studio 4 сек.

Какое есть решение ?

Сам запрос выглядит примерно так:
------------------------------------------------------------
[COLOR="SeaGreen"]$q = "SELECT * FROM table_name";

$sq = sqlsrv_query($conn, $q);

while ($sfa_address_book = sqlsrv_fetch_array($sq)){

}[/COLOR]
------------------------------------------------------------
Запрос занял 4-е минуты, очень долго:eek:
253
19 июля 2010 года
Proger_XP
1.5K / / 07.08.2004
Попробуй вытаскивать по несколько тысяч за раз (LIMIT x, 2048 например).
5.3K
19 июля 2010 года
Bear Deon
82 / / 20.01.2007
Цитата: Proger_XP
Попробуй вытаскивать по несколько тысяч за раз (LIMIT x, 2048 например).



В MS Sql нет LIMIT ((

Там он вообще работает что-то в духе того:

SELECT TOP 15 * FROM table WHERE id NOT IN (SELECT TOP 15 * FROM table)

От чего запрос становится больше.

Даже если я беру данные по нескольку проходов по 100 000 строк, то у меня все равно получается суммарное время 4-е минуты =(

253
19 июля 2010 года
Proger_XP
1.5K / / 07.08.2004
Видимо перекачивается слишком большой объём. Если с уменьшением размера запроса за раз скорость не меняется - значит, наверное, ничего не сделаешь.

Я попробовал на своей таблице выбрать 300к строк через тот цикл, что у тебя, но из MySQL - скрипт секунд за 10 справился. Может в пхпшной реализации sqlsrv_* есть какое-то тонкое место, где тормозит.
339
20 июля 2010 года
verybadbug
619 / / 12.09.2005
Цитата: Bear Deon
В MS Sql нет LIMIT ((


Реализация постраничной выборки в MS SQL Server... может пригодится

http://www.arbinada.com/main/node/463

61K
28 июля 2010 года
foxig
6 / / 28.07.2010
База данных MyISAM?
62K
28 июля 2010 года
glonnawancy
5 / / 14.07.2010
Есть 2 запроса к базе:

sql1 = "SELECT id, men, adres FROM firma ORDER BY id ";
result1 = mysql_querysql1 or diemysql_error ."<br/>". sql1;

и

sql2 = "SELECT id, men, famil FROM menedger where ? " ;
result2 = mysql_querysql2 or diemysql_error ."<br/>". sql2;

Подскажите, что подставить во второй запрос в where, чтобы выбрать только поле men из первой таблицы?
339
02 августа 2010 года
verybadbug
619 / / 12.09.2005
Цитата: glonnawancy
Есть 2 запроса к базе:

sql1 = "SELECT id, men, adres FROM firma ORDER BY id ";
result1 = mysql_querysql1 or diemysql_error ."<br/>". sql1;

и

sql2 = "SELECT id, men, famil FROM menedger where ? " ;
result2 = mysql_querysql2 or diemysql_error ."<br/>". sql2;

Подскажите, что подставить во второй запрос в where, чтобы выбрать только поле men из первой таблицы?



непонятно чего хотите!!!
1. какие есть таблицы (какие в них поля)?
2. что хотите получить в результате запроса?

253
02 августа 2010 года
Proger_XP
1.5K / / 07.08.2004
Цитата: glonnawancy

Подскажите, что подставить во второй запрос в where, чтобы выбрать только поле men из первой таблицы?


Можно и одним:

 
Код:
"SELECT menedger.id, menedger.men, menedger.famil, firma.id, firma.men, firma.adres FROM menedger, firma where menedger.men =  firma.men";
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог