Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Составление SQL-запросов > [mysql] Оптимизация запроса c субселектом


Автор: Sanchezzz 4.12.2012, 12:03
Добрый день нужно оптимизировать следующий запрос 
Код

set @n:=0;    
SELECT T1.* FROM ( 
        SELECT @n := @n +1 AS rownum, id, `company_procent`
    FROM  `company`    ORDER BY  `company_procent` DESC
) as T1 WHERE T1.id IN (1,3,5,8)

Запрос сортирует все записи  по числу ( число обозначает на сколько хорошо заполнен профиль компании) что бы узнать на какой позиции компания по заполненной информации.

Автор: Akina 4.12.2012, 12:16
Единственная видимая оптимизация - это ввести LIMIT в подзапрос. В конкретно этом запрос - LIMIT 8.

Автор: Sanchezzz 4.12.2012, 14:33
Да лимит помог
А почему именно 8 а не 4 ?

Автор: Akina 4.12.2012, 14:39
Цитата(Sanchezzz @  4.12.2012,  15:33 Найти цитируемый пост)
почему именно 8 а не 4 ? 

Потому что ежели 4, то получишь первые 4 записи (id=1..4)... а тебе нужны 5-я и 8-я...

Добавлено через 1 минуту и 41 секунду
Так, стопчик... а ты вообще отбираешь не по вычисленному номеру записи... тогда лимит вообще тут неприменим.

Автор: Sanchezzz 5.12.2012, 12:31
Цитата

Так, стопчик... а ты вообще отбираешь не по вычисленному номеру записи... тогда лимит вообще тут неприменим. 
 Ага, мне пришлось темные силы заставили.

Пока оставил как есть без лимита  и в реалтайме показываю из мемкеша 
Скорее всего перерасчет позиции в каталоге вынесу в крон и раз в день и буду у компании обновлять позицию в каталоге.


Автор: Akina 5.12.2012, 12:37
Sanchezzz, а сколько всего записей в таблице company? овчинка выделки-то стОит?
Опять же - как часто меняется значение поля company_procent? если редко - мож сгрюкать отдельную таблицу с номерами, и апдатить её из триггера?

Автор: Sanchezzz 10.12.2012, 17:03
Akina почти 9-10к компаний с одного города загрузи для теста около 5к.
Каждый пользователь имеет N добавленных лично компаний но на главной странице выводится 4 из последних добавленных пользователем.
company_procent - это поле на сколько профиль компании заполнен, меняется всегда когда пользователь редактирует компанию.










Автор: Akina 10.12.2012, 17:08
Т.е. изменение company_procent только интерактивно? Тогда однозначно отдельная таблица с обновлением по триггеру.

Автор: Sanchezzz 10.12.2012, 17:28
ага. 
А если доп поле сделать где номер указываем компании в каталоге, перерасчет делаем по крону каждые 3 часа. 
Что бы не привращять в систему реалтайм.
Этот функционал только для того что бы вывести на главной странице 4 компании и на каком они месте smile идиотизм)
Возможно этот бесполезный функционал и не будет реализован и заменен на скрытый рейтинг )

Автор: tzirechnoy 10.12.2012, 20:47
Цитата
А если доп поле сделать где номер указываем компании в каталоге, перерасчет делаем по крону каждые 3 часа. 


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

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)