1. Задавайте здесь вопросы о коде, которые не подходят в другие разделы, такие как:
    Дизайн > Верстка
    PHP > Как сделать на PHP
    Скрыть объявление

SQL

Тема в разделе "Web Coding", создана пользователем gimmo, 19 май 2007.

Статус темы:
Закрыта.
Модераторы: latteo
  1. gimmo

    gimmo

    Регистр.:
    4 апр 2007
    Сообщения:
    228
    Симпатии:
    41
    Делаю запрос
    Код:
    $sql="SELECT distinct m.* from media m left join tag2media t2m on t2m.VID = m.VID left join tags t on t2m.TID = t.id where m.media_type = 'video' and active = '+' AND m.type='public' and m.active = '+'and (m.title like '%".doEscape($_REQUEST[search_id])."%' or t.keyword like '%".doEscape($_REQUEST[search_id])."%' or m.description like '%".doEscape($_REQUEST[search_id])."%') $sortby limit $startfrom, $config[items_per_page]";
    и всё - ждать секунд 10 .
    Сервер - дедик.
    Я поперву думал меня роботы угружают - яндех с гуглем круглосуточно пасутся - отключил их - не помогло.
    Думаю проблема в запросе - гляньте кто понимает...
    Ошибок в логах нет,свап пустой.
    Али подскажите куда смотреть.
    Может базу чем-то почекать?
    Любая помощь приветствуется.
     
  2. fpinger

    fpinger

    Регистр.:
    11 май 2007
    Сообщения:
    253
    Симпатии:
    58
    Может нужно индексы создать по нужным полям?

    Кроме того вот такое: m.active = '+' - бред. Лучше создать INT поля и выставлять 1 или 0.
     
    gimmo нравится это.
  3. zavulon

    zavulon Постоялец

    Регистр.:
    9 май 2007
    Сообщения:
    79
    Симпатии:
    34
    1. сделай индексы на media.VID, tag2media.VID, tag2media.TID
    2. может не все поля из media надо?
    3. distinct m.*? может из-за этого? если да, то может при добавлении/изменении таблицы можно удалять дубликаты и если нужно, то добавить поле count, которое ++
    4. если ничего не поможет, то подумай по поводу кеширования.
     
    gimmo нравится это.
  4. keatlon

    keatlon Прохожие

    какая СУБД ? Если mysql то сейчас и впредь поможет EXPLAIN
    (это только для select'ов),

    explain SELECT distinct m.* from med...

    а далее смотри результат колонки rows и key, key не должен быть null, а значение rows как можно меньше, так как это колво сканируемых строк
     
  5. gimmo

    gimmo

    Регистр.:
    4 апр 2007
    Сообщения:
    228
    Симпатии:
    41
    Пошел разбираться - результат отпишу.
     
  6. gimmo

    gimmo

    Регистр.:
    4 апр 2007
    Сообщения:
    228
    Симпатии:
    41
    Надо бы поменять название темы - да не знаю как.
    Теперь это должно называться "Связка PHP MySql Smarty".
    Это в PHP:
    Код:
    $sql="select * from media WHERE media_type = 'video' AND UID=$_REQUEST[UID] and type='$_REQUEST[type]' order by VID desc limit $startfrom, $config[items_per_page]";
    	$rs=$conn->execute($sql);
    	if($rs->recordcount()>0)$vdo = $rs->getrows();
    	$start_num=$startfrom+1;
    	$end_num=$startfrom+$rs->recordcount();
    	
    Это в шаблоне:
    Код:
    <div class=moduleEntryTags> {$language[4]}: {insert name=media_keyword assign=tags vid=$answers[i].VID} {section name=j loop=$tags}
                                            <a href="{$baseurl}/search_result.php?search_id={$tags[j]}">{$tags[j]}</a> &nbsp; {/section}
                                          </div>
    В шаблоне присутствует ещё один внешний цикл . Как я понимаю при вызове тегов оно херит то, что втащило в память (getrows) и делает это снова...и снова...и снова.
    Вытер из шаблона этот кусок - стало гораздо веселее...
    Вопрос - как поправить код (шаблон?).
    Нужен ответ как для идиота - поскольку я в этом не очень.
    Предыдущие посты оч. помогли - всё будет включено при окончательной чистке - однако это не решает мою проблему т.е разница видна , но затык не в этом.
     
  7. tov_Me

    tov_Me Постоялец

    Регистр.:
    7 апр 2007
    Сообщения:
    93
    Симпатии:
    6
    два left join'а сьедают кучу процессорного времени. По-хорошему от них лучше отказаться, и "склеивать" таблицы из трех запросов на php.
     
  8. fpinger

    fpinger

    Регистр.:
    11 май 2007
    Сообщения:
    253
    Симпатии:
    58
    Ага. А ещё скажи, что от базы данных нужно отказаться. :D

    Может лучше индексы добавить? Да и пост по моему был о правке шаблона, а не запроса...
     
  9. gimmo

    gimmo

    Регистр.:
    4 апр 2007
    Сообщения:
    228
    Симпатии:
    41
    Предположительно опытные товарищи подскажут шаблон или код или оба и как. Хотелось бы малой кровью, поскольку проект на ходу и переколбашивать всё не очень удобно.Эта проблема сквозная - т.е. присуща всему скрипту.Я привёл только одно место.
    Запрос из первого поста выполнялся прямо на базе с эксплейном и занял 0,0063 сек - на 10-20 сек никак не похоже.
    кейзов с нулем нет, а строк - по количеству контента - мыж ишшем.....
    На страничку выводится десяток видео - в каждом примерно 3 тега.
    Если теги не выводить (вырезать кусок из шаблона) задержка на глаз не заметна.Т.е. всё происходит с приемлимой скоростью.
    И вообще с увеличением числа юзверей и контента (независимо от нагрузки в текущий момент) всё как-то отупело и еле ворочается. Я полагаю надо всё делать заново, но блин не успеваю трагически.И так уже половину начисто переколбасил.
    У меня такое впечатление, что смарти вызывает нечто некэшированное и от этого все траблы. Как я понимаю индексирование + проч. даст выигрыш в разы, а тут имеется явный заёб.
    Потому и изменил постановку вопроса.
    Поскольку число тегов неизвестно, смарти не может кешировать это место - оно должно быть описано как-то иначе не понимаю как.
    Мы сами не местные - мокументы украли ... поможить братья !!
     
  10. fpinger

    fpinger

    Регистр.:
    11 май 2007
    Сообщения:
    253
    Симпатии:
    58
    to gimmo, шаблон смарти кэширует нормально (там генерится foreach, который отрабатывает быстро). И проблема здесь покка мне не понятно. Запрос к БД как я понял осуществляется быстро. Я бы замерил общее время отдачи странички. Если оно значительно меньше её отображения в браузере, то проблема скорее всего в отдачи графики. Вы случаем не из БД её отдаёте? Или сложности самой структуры страницы (куча табличной вёрстки).
     
Статус темы:
Закрыта.