Правила     Закладки     Карма    Календарь    Журналы    Помощь    Поиск    PDA    Чат   
        СМС-ки
   
Пейджер выключен!
 
Фильтр авторов:    показать 
  скрыть
  Ответ в темуСоздание новой темыСоздание опроса

> Провел сравнение и теперь озадачен
McLotos  
 ۩  Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



武士道
******

Профиль
Группа: Форумчанин
Завсегдатай форума
Сообщений: 1225
Пользователь №: 28342
На форуме: 5 лет, 5 месяцев, 26 дней
Карма: 28




Всем привет.
Недавно провел оптиизацию одного скрипта, которы генерирует отчеты для пользователей, отеты бывают большими - 60000+ строк где каждая строка может содержать данные с 3-5 таблиц.
Так вот этот отчет генерировался пару часов каждый раз, а нужен он раз в месяц. Я подумал что нужно как-то ускорить процесс генерации этого отчета, потому-что все пару часов сервер работал на пределе своих возможностей и пользователи жаловались, я провел некоторые сравнения и был очень озадачен результатами
В качестве тестов посылал AJAX'ом запросы, каждый раз вытягивая по 100 записей
select * from table limit X,Y #50 сек 3500 записей 
select * from table where id>X and id<=Y #50сек на 49000 записей
select * from table where `id`>X and `id`<=Y #50сек на 61000 записей

Как еще ускорить? Указывать все поля поименно.
Кто может объяснить почему всё именно так?


--------------------
программирование - инструмент для решения конкретных задач, любая попытка спроектировать что-то универсальное приведет к провалу.©paul85
В любом случае тебе прийдётся пройти путь изобретения велосипеда, который прошли другие, только причиной твоего изобретения будет непонимание принципов работы велосипеда изобретённого другими людьми.©SlavaFr
PMПисьмо на e-mail пользователю
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
T1grOK  
Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



Здесь живет
******

Профиль
Группа: Форумчанин
Завсегдатай форума
Сообщений: 2704
Пользователь №: 24406
На форуме: 6 лет, 1 месяц, 22 дня
Карма: 170




Цитата (McLotos @ 2.04.2016 - 12:13)
В качестве тестов посылал AJAX'ом запросы, каждый раз вытягивая по 100 записей

В чем польза подобного теста непонимаю...


--------------------
Mysql, Postgresql, Redis, Memcached, Unit Testing, CI, Kohana, Yii, Phalcon, Zend Framework, Joomla, Open Cart, Ymaps, VK Api
PMПисьмо на e-mail пользователюСайт пользователя
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
FatCat  
Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



Чеширский кот
******

Профиль
Журнал
Группа: Администратор
Почтальон группы
Сообщений: 5911
Пользователь №: 1
На форуме: 10 лет, 10 месяцев, 2 дня
Карма: 125

Не пью :
22 года, 3 месяца, 2 дня


Цитата (McLotos @ 2.04.2016 - 15:13)
где каждая строка может содержать данные

Личными экспериментами установлено, что если размер строки больше примерно 4 килобайт, быстрее будет в цикле тянуть по 1 строке.

60 000 запросов - да, около 1 минуты, значит остальные 1 час 59 минут - это обработка данных. Это и нужно оптимизировать в первую очередь.


--------------------
Бесплатному сыру в дырки не заглядывают...
PMПисьмо на e-mail пользователюICQ
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
AllesKlar  
Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



Здесь живет
******

Профиль
Группа: Форумчанин
Завсегдатай форума
Сообщений: 3376
Пользователь №: 38635
На форуме: 2 года, 11 месяцев, 12 дней
Карма: 170




McLotos
Для быстрых отчетов нужны денормализированные таблицы.
Помимо заполнения основных, заполнять "отчетные" в режиме реального времени.
Хотя бы индексами к данным основных таблиц.
Тогда будет колоссальная экономия на обработке данных.
Да, база распухнет. Но не бывает быстро, качественно и дешево одновременно smile.gif


--------------------
[продано копирайтерам]
PMПисьмо на e-mail пользователю
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
depp  
Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



Здесь живет
******

Профиль
Группа: Форумчанин
Завсегдатай форума
Сообщений: 299
Пользователь №: 40589
На форуме: 2 года, 5 дней
Карма: 20




почему то мне кажется что у вас проблема в limit лежит. поможет совет AllesKlar. нужна денормализация для ускорения выборки.
PMПисьмо на e-mail пользователю
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
Ron  
Дата
Цитировать сообщение

Пользователь сейчас на форуме



Здесь живет
******

Профиль
Группа: Форумчанин
Завсегдатай форума
Сообщений: 1046
Пользователь №: 41686
На форуме: 1 год, 4 месяца
Карма: 13




Цитата (AllesKlar @ 2.04.2016 - 21:18)
Для быстрых отчетов нужны денормализированные таблицы.

Так точно.


--------------------
Жду 5.11.2017
PMПисьмо на e-mail пользователю
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
McLotos  
 ۩  Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



武士道
******

Профиль
Группа: Форумчанин
Завсегдатай форума
Сообщений: 1225
Пользователь №: 28342
На форуме: 5 лет, 5 месяцев, 26 дней
Карма: 28




Там и так база денормализована до безумия =)
В одной таблице лежит поле с сериалайзом, вытягивается каждая строка таблицы, распаковывается каждый сериалайз, по данным из сериалайза данные тянутся еще с 1й таблицы, там еще 2 сериалайза, они тоже разбираются и потом данные берутся еще с одной таблицы.
В результате данные с 4х таблиц распаковываются в огромный массив и записываются в файл построчно.
В общем жуть. А привести все к новой структуре это очень сложно в плане что нужно будет переработать всю структуру БД, а на боевом проекте... сами понимаете... файл выростает до 70-80 тысяч строк и 80 колонок


--------------------
программирование - инструмент для решения конкретных задач, любая попытка спроектировать что-то универсальное приведет к провалу.©paul85
В любом случае тебе прийдётся пройти путь изобретения велосипеда, который прошли другие, только причиной твоего изобретения будет непонимание принципов работы велосипеда изобретённого другими людьми.©SlavaFr
PMПисьмо на e-mail пользователю
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
T1grOK  
Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



Здесь живет
******

Профиль
Группа: Форумчанин
Завсегдатай форума
Сообщений: 2704
Пользователь №: 24406
На форуме: 6 лет, 1 месяц, 22 дня
Карма: 170




Цитата (AllesKlar @ 2.04.2016 - 17:18)
Для быстрых отчетов нужны денормализированные таблицы.

Цитата (McLotos @ 3.04.2016 - 12:27)
Там и так база денормализована до безумия =)

Все полезно в меру, возможно стоило бы хотя бы придерживаться первой нормальной форме.

Нужно обеспечить атомарность, а это можно сделать не сломав текущего функционала.


--------------------
Mysql, Postgresql, Redis, Memcached, Unit Testing, CI, Kohana, Yii, Phalcon, Zend Framework, Joomla, Open Cart, Ymaps, VK Api
PMПисьмо на e-mail пользователюСайт пользователя
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
McLotos  
 ۩  Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



武士道
******

Профиль
Группа: Форумчанин
Завсегдатай форума
Сообщений: 1225
Пользователь №: 28342
На форуме: 5 лет, 5 месяцев, 26 дней
Карма: 28




Цитата (T1grOK @ 3.04.2016 - 18:41)
Все полезно в меру, возможно стоило бы хотя бы придерживаться первой нормальной форме.

А это уже не ко мне, а к тем, кто проектировал такую БД =)
Сериалайзы в БД рулят мля


--------------------
программирование - инструмент для решения конкретных задач, любая попытка спроектировать что-то универсальное приведет к провалу.©paul85
В любом случае тебе прийдётся пройти путь изобретения велосипеда, который прошли другие, только причиной твоего изобретения будет непонимание принципов работы велосипеда изобретённого другими людьми.©SlavaFr
PMПисьмо на e-mail пользователю
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
twin  
Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



Глухой нуб
******

Профиль
Группа: Администратор
Почтальон группы
Сообщений: 15562
Пользователь №: 6543
На форуме: 8 лет, 2 месяца, 6 дней
Карма: 299

Трезвый :
5 лет, 11 месяцев, 15 дней


Про лимит тут писали. Что касается косых кавычек, тоже на мой взгляд логично. Без них интерпретатору приходится проверять, не команда ли это. И так а каждую строку.


--------------------
Если вам недостаточно собственных заблуждений, можно расширить их мнениями экспертов.

Нужно уважать мнение оппонета. Ведь заблуждаться - его святое право.

Зачем ворошить старое, когда можно наворотить новое?

user posted image
PMСайт пользователяICQ
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
DedMorozzz  
Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



Эникейщик
******

Профиль
Группа: Эксперт
Группа переписки
Сообщений: 4053
Пользователь №: 19498
На форуме: 7 лет, 1 месяц, 12 дней
Карма: 89




выбираешь именно по айди?
Это важно. Внятно сформулированый вопрос - "Выборка использует ключи?"

А с лимитом, проблема в том что мускул всё равно перебирает все поля, пока не найдёт нужные, с которых начнётся выборка (можешь это легко эксплейном проверить)


--------------------
Если не говорить пользователям, что Linux это "Сложно и страшно", то им совершенно всё равно, в чём не разбираться
PMПисьмо на e-mail пользователюСайт пользователяICQ
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
  Быстрый ответ
Информация о Госте
Введите Ваше имя
Кнопки кодов
Для вставки цитаты, выделите нужный текст и
НАЖМИТЕ СЮДА
Введите сообщение
Смайлики
:huh:  :o  ;) 
:P  :D  :lol: 
B)  :rolleyes:  <_< 
:)  :angry:  :( 
:unsure:  :blink:  :ph34r: 
     
Показать всё

Опции сообщения  Включить смайлики?
 Включить подпись?
 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:

Опции темы Ответ в темуСоздание новой темыСоздание опроса