|
|
|
Помогите оптимизировать запрос
|
|||
|---|---|---|---|
|
#18+
Есть sql-запрос: Код: plsql 1. 2. 3. 4. 5. Суть в чем, нужно выбрать только те uid которые заходили на сайт в течение 21 дня и более. Все в принципе выбирается и работает, но запрос выполняется примерно пол секунды(что долго, ибо на странице до десятка подобных запросов с разными датами и условиями). Ребят, как смог, так и оптимизировал, но чувствую, что можно как то еще. Не слишком силен в БД поэтому пишу здесь. p.s. на ip и uid в таблице стоят индексы. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.03.2015, 09:10:33 |
|
||
|
Помогите оптимизировать запрос
|
|||
|---|---|---|---|
|
#18+
если хотите помощи в оптимизации, то необходимо выложить SHOW CREATE TABLE (DDL) всех участвующих таблиц, EXPLAIN запроса и тд и тп ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.03.2015, 09:20:40 |
|
||
|
Помогите оптимизировать запрос
|
|||
|---|---|---|---|
|
#18+
aramanuid которые заходили на сайт в течение 21 дня и более Поясните эту фразу - её можно интерпретировать минимум тремя разными способами. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.03.2015, 09:37:27 |
|
||
|
Помогите оптимизировать запрос
|
|||
|---|---|---|---|
|
#18+
Прикладываю файлы и схему: Код: plsql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.03.2015, 09:37:37 |
|
||
|
Помогите оптимизировать запрос
|
|||
|---|---|---|---|
|
#18+
Akinaaramanuid которые заходили на сайт в течение 21 дня и более Поясните эту фразу - её можно интерпретировать минимум тремя разными способами. Пользователь зашел сегодня, вчера и например 2 месяца спустя. А если он зашел только сегодня и вчера - его не нужно показывать. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.03.2015, 09:38:30 |
|
||
|
Помогите оптимизировать запрос
|
|||
|---|---|---|---|
|
#18+
То есть только те, кто заходил хотя бы один раз за последние 21 день, и хотя бы один раз ранее? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.03.2015, 09:41:55 |
|
||
|
Помогите оптимизировать запрос
|
|||
|---|---|---|---|
|
#18+
araman, "заходили на сайт в течение 21 дня и более." - это как? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.03.2015, 10:02:22 |
|
||
|
Помогите оптимизировать запрос
|
|||
|---|---|---|---|
|
#18+
если `created_at` у вас дата посещения - то в подзапросе при Group By покажет произвольную дату (использовать либо MAX... либо... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.03.2015, 10:21:03 |
|
||
|
Помогите оптимизировать запрос
|
|||
|---|---|---|---|
|
#18+
Akina хотя бы один раз ранее. MasterZiv см. выше Alex_Ustinov не понял, можно более подробно? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.03.2015, 10:32:28 |
|
||
|
Помогите оптимизировать запрос
|
|||
|---|---|---|---|
|
#18+
пример с данными и желаемым рез-том приведите, типа посещал тогда-то надо получить то-то ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.03.2015, 10:58:47 |
|
||
|
Помогите оптимизировать запрос
|
|||
|---|---|---|---|
|
#18+
Уточняю: Интервал между первым и последним заходом пользователя от 21 дня. Т.е. если пользователь заходил к примеру: 01.03.2015 15.03.2015 26..03.2015 он попадает в выборку. А если: 10.03.2015 25.03.2015 тогда он не попадает. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.03.2015, 11:21:56 |
|
||
|
Помогите оптимизировать запрос
|
|||
|---|---|---|---|
|
#18+
aramanПользователь зашел сегодня, вчера и например 2 месяца спустя. А если он зашел только сегодня и вчера - его не нужно показывать. Может быть "два месяца назад" ? В общем, ты сначала с русским языком разберись, это -- средние классы школы. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.03.2015, 11:26:25 |
|
||
|
Помогите оптимизировать запрос
|
|||
|---|---|---|---|
|
#18+
araman, ну так Код: sql 1. 2. 3. 4. 5. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.03.2015, 11:28:22 |
|
||
|
Помогите оптимизировать запрос
|
|||
|---|---|---|---|
|
#18+
MasterZiv, Для начала на Вы. Не может быть, читайте внимательно вопрос. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.03.2015, 11:32:36 |
|
||
|
Помогите оптимизировать запрос
|
|||
|---|---|---|---|
|
#18+
araman , ты сначала с логикой запроса разрерись (после русского языка, разумеется). Код: sql 1. 2. 3. 4. 5. 6. 7. 8. Таблица stats сгруппированная дважды по одному и тому же условию, JOIN-иться сама с собой. Вопрос -- зачем ? Очевидно, что подзапрос можно просто выкинуть, и будет то же самое (тот же самый бред, ну да ладно -- всё равно тот же самый). Код: sql 1. 2. 3. 4. 5. 6. 7. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.03.2015, 11:37:48 |
|
||
|
Помогите оптимизировать запрос
|
|||
|---|---|---|---|
|
#18+
tangliraraman, ну так Код: sql 1. 2. 3. 4. 5. А как вы кол-во будете считать в таком случае? Да и запрос выполняется тоже 0.5 секунды. В моем примере он еще выдает общее кол-во заходов. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.03.2015, 11:38:58 |
|
||
|
Помогите оптимизировать запрос
|
|||
|---|---|---|---|
|
#18+
MasterZiv, Если выкинуть подзапрос то тогда не посчитать корректно кол-во заходов. Согласен что бред само на себя джойнить, но иначе я не придумал, поэтому и обратился сюда. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.03.2015, 11:41:37 |
|
||
|
Помогите оптимизировать запрос
|
|||
|---|---|---|---|
|
#18+
авторСуть в чем, нужно выбрать только те uid которые заходили на сайт в течение 21 дня и более. Все в принципе выбирается и работает, но запрос выполняется примерно пол секунды(что долго, ибо на странице до десятка подобных запросов с разными датами и условиями). Ну и могу естественно предложить самый простой и действенный способо оптимизации такой фигни -- предвычисление. В момент захода пользователя на сайт нужно предварительно вычислять список этих самых пользователей. Естественно, в момент захода он корректируется только -- один пользователь выбывает из списка, другой -- добавляется. Ну и естественно можно показывать прост произвольных N пользователей на странице -- последних, кто заходили, или просто тупо произвольно брать 10-20 -- всю эту веб-хрень всё равно никто никогда не проверяет и она 200 раз никому не нужна. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.03.2015, 11:42:36 |
|
||
|
Помогите оптимизировать запрос
|
|||
|---|---|---|---|
|
#18+
MasterZiv, Если вас не затруднит, прочтите еще раз сообщение 17439157 У меня такое ощущение что вы не до конца поняли задачу, а пытаетесь тут умничать и "тыкать". Ничего лично ессно. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.03.2015, 11:45:22 |
|
||
|
Помогите оптимизировать запрос
|
|||
|---|---|---|---|
|
#18+
aramanУточняю: Интервал между первым и последним заходом пользователя от 21 дня. Т.е. если пользователь заходил к примеру: 01.03.2015 15.03.2015 26..03.2015 он попадает в выборку. А если: 10.03.2015 25.03.2015 тогда он не попадает. Чё тогда проще вообще? Храни в таблице пользователей дату первого захода пользователя (создания?) и последнего захода пользователя. И автоматом из этого можно вычислить признак, нужно ли его показывать. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.03.2015, 11:46:16 |
|
||
|
Помогите оптимизировать запрос
|
|||
|---|---|---|---|
|
#18+
aramanMasterZiv, Если вас не затруднит, прочтите еще раз сообщение 17439157 У меня такое ощущение что вы не до конца поняли задачу, а пытаетесь тут умничать и "тыкать". Ничего лично ессно. Безусловно, я с трудом понимаю тот бред, который ты тут несёшь... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.03.2015, 11:47:02 |
|
||
|
Помогите оптимизировать запрос
|
|||
|---|---|---|---|
|
#18+
araman, Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. Где ключи или хотя бы один индекс ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.03.2015, 11:48:46 |
|
||
|
Помогите оптимизировать запрос
|
|||
|---|---|---|---|
|
#18+
MasterZiv, Простите, а это что по вашему: Код: sql 1. только дайте конкретный ответ без холивара про бред и прочее. Либо научитесь вести конструктивный диалог, раз мой русский хромает с ваших слов. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.03.2015, 11:51:21 |
|
||
|
Помогите оптимизировать запрос
|
|||
|---|---|---|---|
|
#18+
MasterZiv, Как я вижу в 1 посте я про это упомянул. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.03.2015, 11:51:58 |
|
||
|
Помогите оптимизировать запрос
|
|||
|---|---|---|---|
|
#18+
aramanMasterZiv, Как я вижу в 1 посте я про это упомянул. Так надо не упоминать, а дать вывод Код: sql 1. Индексы бывают разные, и то, что ты считаешь под "в таблице стоят индексы", может означать всё, что угодно. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.03.2015, 11:55:03 |
|
||
|
Помогите оптимизировать запрос
|
|||
|---|---|---|---|
|
#18+
aramanMasterZiv, Простите, а это что по вашему: Код: sql 1. только дайте конкретный ответ без холивара про бред и прочее. Либо научитесь вести конструктивный диалог, раз мой русский хромает с ваших слов. Это к чему -- я не понял. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.03.2015, 11:55:33 |
|
||
|
Помогите оптимизировать запрос
|
|||
|---|---|---|---|
|
#18+
MasterZiv, Прикладываю скрин индексов. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.03.2015, 11:56:38 |
|
||
|
Помогите оптимизировать запрос
|
|||
|---|---|---|---|
|
#18+
aramanА как вы кол-во будете считать в таком случае?А зачем?aramanСуть в чем, нужно выбрать только те uid которые заходили на сайт в течение 21 дня и более aramanДа и запрос выполняется тоже 0.5 секунды.Значит, быстрее уже не получится. Если у вас индексы на условие отбора уже есть. MasterZivГде ключи или хотя бы один индекс ?Настоящим джыдаям они без надобности :) aramanа это что по вашему: Код: sql 1. Не знаю, как по-его, а по-моему, это феерический бред. Либо вы просто случайно не те кавычки поставили. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.03.2015, 12:05:46 |
|
||
|
Помогите оптимизировать запрос
|
|||
|---|---|---|---|
|
#18+
tanglirЛибо вы просто случайно не те кавычки поставили.Хотя... даже если бы это были "правильные" бэктики, бредовость от этого бы не уменьшилась... разве что ещё и номер таблицы там не тот указан ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.03.2015, 12:06:52 |
|
||
|
Помогите оптимизировать запрос
|
|||
|---|---|---|---|
|
#18+
aramanУточняю: Интервал между первым и последним заходом пользователя от 21 дня. Код: sql 1. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.03.2015, 12:20:26 |
|
||
|
Помогите оптимизировать запрос
|
|||
|---|---|---|---|
|
#18+
aramanMasterZiv, Прикладываю скрин индексов. Эм, я тебе кажется уже написал, как надо получать индексы и как их показывать. Именно потому, то (по моему подозрению) 80% указанного тут -- НЕ ИНДЕКСЫ. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.03.2015, 12:29:47 |
|
||
|
Помогите оптимизировать запрос
|
|||
|---|---|---|---|
|
#18+
araman Alex_Ustinov не понял, можно более подробно? Группировка в MySQL aramantangliraraman, ну так Код: sql 1. 2. 3. 4. 5. А как вы кол-во будете считать в таком случае? Да и запрос выполняется тоже 0.5 секунды. В моем примере он еще выдает общее кол-во заходов. select uid, count(*) ... И чтобы не гадать, покажите ваш вариант этого запроса с планом. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.03.2015, 12:42:28 |
|
||
|
Помогите оптимизировать запрос
|
|||
|---|---|---|---|
|
#18+
retvizan, Я же указал в 1 сообщении свой итоговый запрос, который работает и выводит то что нужно. Но как мне кажется - он медленный(хотя для ~70к записей на простом VPS это может быть и нормально). Поэтому я и обратился сюда, чтобы гуру подсказали можно ли такое оптимизировать. Вместо того чтобы вникнуть, почти на 2 страницах идет пустой холивар про индексы и прочее. Причем я уверен, что господин MasterZiv немного не понимает самого вопроса. Индексы важны, спора нет, но для начала нужно иметь хотя б запрос, чтобы корректно их расставить. Я написал свой вариант, описал что я хотел бы получить в итоге. Буду рад конкретной помощи, а не переливания из пустого в порожнее про русский язык и прочую ахинею. Извините уж, но некоторые мессаги я считаю именно таким. Хорошо, я согласен что джойн самого на себя это бред, всему руками и ногами ЗА что это бред. Может кто-нибудь написать как получить результат без этого джойна? Буду очень признателен за помощь, а не критику, которая не касается непосредственного вопроса. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.03.2015, 12:48:26 |
|
||
|
Помогите оптимизировать запрос
|
|||
|---|---|---|---|
|
#18+
aramanХорошо, я согласен что джойн самого на себя это бред, всему руками и ногами ЗА что это бред. Может кто-нибудь написать как получить результат без этого джойна? Буду очень признателен за помощь, а не критику, которая не касается непосредственного вопроса. Тебе уже кажется раза 3 написали запрос или идею как его сделать. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.03.2015, 13:02:29 |
|
||
|
Помогите оптимизировать запрос
|
|||
|---|---|---|---|
|
#18+
Вообщем получился такой запрос(выводит то что нужно, и без горе-джойна самого на себя): Код: sql 1. Но время выполнения все равно осталось прежним(~0,5сек). Прикладываю индексы, теперь можно что то сделать или это уже "предел" для этой машины? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.03.2015, 11:58:27 |
|
||
|
Помогите оптимизировать запрос
|
|||
|---|---|---|---|
|
#18+
Прикладываю так же explain По офтопу: Можно как то месаги здесь редактировать? А то в предыдущей хотел переносы добавить к запросу. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.03.2015, 12:15:37 |
|
||
|
Помогите оптимизировать запрос
|
|||
|---|---|---|---|
|
#18+
araman, в group by надо добавить t1.created_at: GROUP BY t1.uid, t1.created_at ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.03.2015, 12:46:32 |
|
||
|
Помогите оптимизировать запрос
|
|||
|---|---|---|---|
|
#18+
мм, тогда почему то вообще возвращается 0 элементов. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.03.2015, 12:56:30 |
|
||
|
Помогите оптимизировать запрос
|
|||
|---|---|---|---|
|
#18+
Всё-таки наверное неправильно я сказал, по created_at лучше не групировать, а агрегировать: Код: sql 1. 2. 3. 4. 5. 6. 7. 8. Но либо одно, либо другое надо сделать. araman Но время выполнения все равно осталось прежним(~0,5сек). Прикладываю индексы, теперь можно что то сделать или это уже "предел" для этой машины? Смотрим ещё раз на запрос: Код: sql 1. 2. 3. 4. 5. 6. 7. 8. Итого -- запрос почти не оптимизируется, потому что обрабатывает все записи из таблицы stats. В плане в лучшем случае ты можешь избавится от сортировки (filesort). Ещё раз хочу тебе предолжить: создать справочник пользователей. Записей там будет существенно меньше (если сайт активный), чем в добавить туда поля -- первый вход и последний вход. выбирать запросом пользователей именно оттуда, а не из статистики. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.03.2015, 12:59:53 |
|
||
|
Помогите оптимизировать запрос
|
|||
|---|---|---|---|
|
#18+
MasterZiv, Спасибо огромное! Идею про справочник понял, завтра попытаюсь на тестовом сервере "провернуть" этот момент. Отпишу о результате. Теоретически да, записей там будет в разы меньше. Соответственно выборки будут практически тривиальными и работать гораздо оперативнее. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.03.2015, 13:08:10 |
|
||
|
Помогите оптимизировать запрос
|
|||
|---|---|---|---|
|
#18+
aramanMasterZiv, Спасибо огромное! Идею про справочник понял, завтра попытаюсь на тестовом сервере "провернуть" этот момент. Отпишу о результате. Теоретически да, записей там будет в разы меньше. Соответственно выборки будут практически тривиальными и работать гораздо оперативнее. Заметь, что я тебе об этом писал ещё на первой странице. А ты вместо того, чтобы думать головой и делать что говорят, кочевряжился. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.03.2015, 13:12:37 |
|
||
|
|

start [/forum/topic.php?all=1&fid=47&tid=1833367]: |
0ms |
get settings: |
8ms |
get forum list: |
18ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
38ms |
get topic data: |
10ms |
get forum data: |
2ms |
get page messages: |
61ms |
get tp. blocked users: |
1ms |
| others: | 229ms |
| total: | 373ms |

| 0 / 0 |
