Модераторы: skyboy, MoLeX, Aliance, ksnk
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Нужна помощь по PHP + MySQL + БД большого размера, Сравнение выбора из больших и маленьких 
:(
    Опции темы
rodendron
Дата 24.4.2005, 13:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 152
Регистрация: 22.3.2005

Репутация: нет
Всего: нет



Добый день!

Очень прошу вас о помощи, завтра показывать первую часть диплома, а у меня существует проблема следующего характера.
Тестировал все на маленьгой БД, 2000 записей, а потом как и положено установил 800 000 и вот оно началось...
В общем на запрос уходит по 30-40 минут. При 2000 записей все выполнялось за считанные секунды.

Вот сам запрос:

Код

SELECT v.kg AS KGN, v.KGP AS KGPN, GP.NAME AS GPN, v.GROT AS GROTN, GO.NAME AS GON, V.NV AS NVN, v.QGV AS QGVN, S.STNM AS STNMN, DATE(V.DAT_WYGR) AS DATN 
from vagreis AS v JOIN GROTA1251 AS GP on v.KGP = GP.TGNL AND v.ESR_WYGR = GP.ST 
LEFT JOIN GROTA1251 AS GO on v.GROT = GO.TGNL AND v.ESR_WYGR = GO.ST 
JOIN STNP AS S on SUBSTRING( S.ST, 1, 5 ) = v.ESR_WYGR 
JOIN KG as K on K.NAME = "Песок" AND K.KG = V.KG 
LIMIT 0, 30



Основная таблица - vagreis.
Это в ней было 2000 записей, а сейчас 800000.

Я же ставлю LIMIT и по идее у меня запрос же не должен зависеть от кол-ва записей.
Что посоветуете сделать?
А то проподаю очень сильно....
Помогите пожалуйста как можно скорее...
А то еще всю ночь с дизайном водиться ,а тут запрос не клеится.

PM MAIL   Вверх
Mal Hack
Дата 24.4.2005, 16:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Мудрый...
****


Профиль
Группа: Участник Клуба
Сообщений: 9926
Регистрация: 15.2.2004

Репутация: 11
Всего: 261



А с индексами у тебя как?
Еще ИМХО, запрос облегчить (разбить) постараться.
PM ICQ   Вверх
rodendron
Дата 24.4.2005, 17:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 152
Регистрация: 22.3.2005

Репутация: нет
Всего: нет



Индексы уже сделаны smile
На все, что участвует в запросе... (

А разбивать тяжело в том плане что использую вывод постранично и т.д. ...
PM MAIL   Вверх
rodendron
Дата 26.4.2005, 18:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 152
Регистрация: 22.3.2005

Репутация: нет
Всего: нет



В индексах все поля, которые участвуют в запросе.

С запросом более менее разобрался.

Но снова появилась проблема - выборка в phpmyadmin происходит быстрее, чем в своей страничке, где в принципе нет никаких наворотов.
Тот же запрос.
И еще - создается впечатление, что запрос начинает все дольше и дольше обрабатываться при все новом и новом запросе. То есть - чем больше раз его запускаешь. - Тем дольше. Такое может быть? Или это просто кажется?

Но все равно - я на своем компе ощущаю небольшую разницу, оба долго.
А у друга - в phpmyadmin - 10 секунд. Через WWW - 5 минут.
Что посоветуете сделать?
Заранее благодарен за ответ.
PM MAIL   Вверх
Opik
Дата 26.4.2005, 18:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Vingrad developer
Сообщений: 1918
Регистрация: 6.10.2004
Где: Рига

Репутация: 2
Всего: 55



покажи, как ты на страничке выполняешь запрос?
PM MAIL Skype   Вверх
rodendron
Дата 26.4.2005, 23:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 152
Регистрация: 22.3.2005

Репутация: нет
Всего: нет



Код

$r = mysql_query("$sql");

if($check != '') {
echo "<TABLE border=1>";
echo "<TR><TD>Код грузополучателя</TD><TD>Имя грузополучателя</TD><TD>Код грузоотправителя</TD><TD>Имя грузоотправителя</TD><TD>Станция</TD><TD>Инвентарный номер вагона</TD><TD>Вес груза</TD><TD>Дата</TD></TR>";
for($i=0; $i<mysql_num_rows($r); $i++)
{
  $f=mysql_fetch_array($r);
  echo "<TR><TD>{$f['KGPN']}</TD>";
  echo "<TD>{$f['GPN']}</TD>";
  echo "<TD>{$f['GROTN']}</TD>";
  echo "<TD>{$f['GON']}</TD>";
  echo "<TD>{$f['STNMN']}</TD>";
  echo "<TD>{$f['NVN']}</TD>";
  echo "<TD>{$f['QGVN']}</TD>";
  echo "<TD>{$f['DATN']}</TD></TR>";
}
echo "</TABLE>";

PM MAIL   Вверх
Mal Hack
Дата 27.4.2005, 10:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Мудрый...
****


Профиль
Группа: Участник Клуба
Сообщений: 9926
Регистрация: 15.2.2004

Репутация: 11
Всего: 261



Цитата
for($i=0; $i<mysql_num_rows($r); $i++)
{
  $f=mysql_fetch_array($r);
  echo "<TR><TD>{$f['KGPN']}</TD>";
  echo "<TD>{$f['GPN']}</TD>";
  echo "<TD>{$f['GROTN']}</TD>";
  echo "<TD>{$f['GON']}</TD>";
  echo "<TD>{$f['STNMN']}</TD>";
  echo "<TD>{$f['NVN']}</TD>";
  echo "<TD>{$f['QGVN']}</TD>";
  echo "<TD>{$f['DATN']}</TD></TR>";
}

Заменяем на:
Код
$s = "";
 while( $f = mysql_fetch_assoc( $r ) )
 { $str .= "<TR><TD>{$f['KGPN']}</TD><TD>{$f['GPN']}</TD><TD>{$f['GROTN']}</TD><TD>{$f['GON']}</TD><TD>{$f['STNMN']}</TD><TD>{$f['NVN']}</TD><TD>{$f['QGVN']}</TD><TD>{$f['DATN']}</TD></TR>"; } 
print $str;

PM ICQ   Вверх
Kud
Дата 2.5.2005, 19:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 7
Регистрация: 30.4.2005
Где: Минск

Репутация: нет
Всего: нет



Цитата(rodendron @ 26.4.2005, 17:29)
И еще - создается впечатление, что запрос начинает все дольше и дольше обрабатываться при все новом и новом запросе. То есть - чем больше раз его запускаешь. - Тем дольше. Такое может быть? Или это просто кажется?

Скорее всего БД еще не освободила ресурсы с прошлого запроса а т.к. ты говоришь, что она большая (таблица) то ей (базе) приходется "ложиться" в своп, для хранения и прошлого и нового резалта.

Цитата(Mal @ 27.4.2005, 09:21)
for($i=0; $i<mysql_num_rows($r); $i++)
{
  $f=mysql_fetch_array($r);
....

Такого рода циклы я уже давно отучил себя писать, ибо сильно уж грузит этот mysql_num_rows() а т.к. у тебя строк дофига то он и вызывается дофига раз.

Вот кстати: думаю поймешь почему тормозило =) накидай на досуге ....
Код

<pre>
<?
 function check($v)
 {
  echo ' -->'.$v."\n";
  return 10;
 }
 
 $q = 'go to check';
 
 for ($i=0;$i<check($q);$i++)
  echo $i."\n";
?>
</pre>


Это сообщение отредактировал(а) Kud - 2.5.2005, 19:41
PM MAIL WWW   Вверх
rodendron
Дата 4.5.2005, 22:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 152
Регистрация: 22.3.2005

Репутация: нет
Всего: нет



Kud, твой код, это как я понял просто пример долгой работы вызова функции?
Добавлено @ 22:58
И в этом вопросе лучше работает:
Код

 while( $f = mysql_fetch_assoc( $r ) )

Добавлено @ 22:59
?
забыл знак вопроса добавить smile
PM MAIL   Вверх
Mal Hack
Дата 4.5.2005, 23:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Мудрый...
****


Профиль
Группа: Участник Клуба
Сообщений: 9926
Регистрация: 15.2.2004

Репутация: 11
Всего: 261



Цитата(rodendron @ 4.5.2005, 23:57)
И в этом вопросе лучше работает:

Да.
PM ICQ   Вверх
oxygen
Дата 5.5.2005, 02:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 48
Регистрация: 4.5.2005
Где: Москва, СВАО

Репутация: нет
Всего: 3



кстати как вариант - сделать свертки нужных полей в отдельные таблицы. Что-то типа кэша. Информация будет дублироваться, размер базы расти, но это не так критично как скорость SQL. В свое время мне это здорово помогло.
PM MAIL WWW ICQ   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | PHP: Базы Данных | Следующая тема »


 




[ Время генерации скрипта: 0.0918 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.