|
Argnist ↓
|
 |
|
05 Февраль, 2011, 11:02:35
|
НЕ ХУЕТА!
ХУЕТА!
|
Карма: 0
Сообщений: 130 Сила слова: 0
|
Есть таблица VISIT:
login varchar
begin int
end int
И таблица TIMES:
time_id
stamp_b int
stamp_e int
Нужно выбрать количество полей из таблицы VISIT, которые удовлетворяют условию:
visit.begin < times.stamp_e and visit.end > times.stamp_b
То есть для каждого промежутка из TIMES найти количество попадающих в этот промежуток посещений из VISIT
Запрос
SELECT `times`.`time_id` AS `time`, count (`visit`.`login`) AS `count` FROM `visit`, `times` WHERE `visit`.`begin` < `times`.`stamp_e` AND `visit`.`end` > `times`.`stamp_b`
GROUP BY `times`.time
вешает сервер со всякими bad gateway
Как сделать правильно?
|
|
|
|
|
Записан
|
|
|
|
|
AlexB ↓
|
 |
|
05 Февраль, 2011, 12:47:20 , спустя 1 час 44 минуты 45 секунд
|
НЕ ХУЕТА!
ХУЕТА!
|
Группа: в ухо Карма: 89
Сообщений: 3425 Сила слова: 2.6
|
Чего план запроса говорит?
|
|
|
|
|
Записан
|
|
|
|
|
AlexB ↓
|
 |
|
05 Февраль, 2011, 12:52:23 , спустя 5 минут 3 секунды
|
НЕ ХУЕТА!
ХУЕТА!
|
Группа: в ухо Карма: 89
Сообщений: 3425 Сила слова: 2.6
|
GROUP BY `times`.time - че за поле time?
|
|
|
|
|
Записан
|
|
|
|
|
Argnist ↓
|
 |
|
05 Февраль, 2011, 02:01:09 , спустя 1 час 8 минут 46 секунд
|
НЕ ХУЕТА!
ХУЕТА!
|
Карма: 0
Сообщений: 130 Сила слова: 0
|
time_id
план?)
explain запроса
id select_type table type possible_keys key key_len ref rows Extra
1 SIMPLE times ALL stamp_b,stamp_e NULL NULL NULL 23040 Using temporary; Using filesort
1 SIMPLE visit ALL begin,end NULL NULL NULL 226092 Range checked for each record (index map: 0x6)
|
|
|
|
|
Записан
|
|
|
|
|
master ↓
|
 |
|
05 Февраль, 2011, 02:05:34 , спустя 4 минуты 25 секунд
|
НЕ ХУЕТА!
ХУЕТА!
|
Квадратов сколько видишь ты?
Группа: Джедаи Карма: 44
Сообщений: 2080 Сила слова: 2.12
|
Argnist, структуру таблицы покажи
|
|
|
|
|
Записан
|
|
|
|
|
Argnist ↓
|
 |
|
05 Февраль, 2011, 02:31:44 , спустя 26 минут 10 секунд
|
НЕ ХУЕТА!
ХУЕТА!
|
Карма: 0
Сообщений: 130 Сила слова: 0
|
Есть таблица VISIT:
login varchar
begin int
end int
И таблица TIMES:
time_id
stamp_b int
stamp_e int
А это чем плохо?) На всех полях стоят индексы.
|
|
|
|
|
Записан
|
|
|
|
|
Argnist ↓
|
 |
|
05 Февраль, 2011, 02:42:36 , спустя 10 минут 52 секунды
|
НЕ ХУЕТА!
ХУЕТА!
|
Карма: 0
Сообщений: 130 Сила слова: 0
|
time_id int естественно
|
|
|
|
|
Записан
|
|
|
|
|
AlexB ↓
|
 |
|
05 Февраль, 2011, 03:00:33 , спустя 17 минут 57 секунд
|
НЕ ХУЕТА!
ХУЕТА!
|
Группа: в ухо Карма: 89
Сообщений: 3425 Сила слова: 2.6
|
time_id int естественно
если это id нахуй группировать по нему?
Мда, мощность запроса 23040 * 226092 строк, положит что хочешь ))))
Спустя 2 минуты 28 секунд добавил Индексы, как ты видишь из плана запроса, - не работают, оно и понятно, ибо все условия на сравнение полей из разных таблиц. В каком-нибудь Оракле воозможно спасли бы materialized view, а в мускуле ... стоит подумать о денормализации таблицы visit
|
|
|
|
« Последнее редактирование: 05 Февраль, 2011, 03:00:33 от AlexB »
|
Записан
|
|
|
|
|
master ↓
|
 |
|
05 Февраль, 2011, 03:51:21 , спустя 50 минут 48 секунд
|
НЕ ХУЕТА!
ХУЕТА!
|
Квадратов сколько видишь ты?
Группа: Джедаи Карма: 44
Сообщений: 2080 Сила слова: 2.12
|
завести счётчик, обновлять при добавлении столбца. это сведёт зависимость нагрузки от количества строк от квадратичной к линейной
|
|
|
|
|
Записан
|
|
|
|
|
Argnist ↓
|
 |
|
05 Февраль, 2011, 04:16:31 , спустя 25 минут 10 секунд
|
НЕ ХУЕТА!
ХУЕТА!
|
Карма: 0
Сообщений: 130 Сила слова: 0
|
группировка по идее чтобы он мне выдал пары
{time_id, count} - на каждый промежуток свое число. Счетчик никак, данные приходят извне.
|
|
|
|
|
Записан
|
|
|
|
|
AlexB ↓
|
 |
|
05 Февраль, 2011, 04:32:25 , спустя 15 минут 54 секунды
|
НЕ ХУЕТА!
ХУЕТА!
|
Группа: в ухо Карма: 89
Сообщений: 3425 Сила слова: 2.6
|
группировка по идее чтобы он мне выдал пары
Группировка имеет смысл только по неуникальному полю, в этом и состоит ее смысл - объединить записи с одинаковым значением поля в группы. Получать пары - это уже разбор результата, к запросу отношения не имеет.
|
|
|
|
|
Записан
|
|
|
|
|