Задавайте вопросы, мы ответим
Вы не зашли.
Страниц: 1
Добрый день.
Знаю, подобные вопросы уже поднимались, но для себя ответа так и не нашел.
Есть таблица, в которой в данный момент около 7 млн записей. Позже она будет быстро расти.
Структура таблицы:
Неактивен
Логика запроса не очень понятна. После группировки мы имеем группы по domain_id, в каждой группе имеются представители с разными index_date. Какой смысл имеет сортировка по index_date?
Неактивен
Но если, вообще говоря, включить режим «капитан-отвечает-только-на-заданный-вопрос»,
то должно хватить индекса на (`index`, `domain_id`, `index_date`).
Неактивен
Смысл здесь такой. Мне нужно выбрать страницы, которые давно не индексировались - имеют наименьший index_date. (пробовал и GROUP by `domain_id` ORDER by MIN(`index_date`)) Т.е. по index_date выстраивается очередь из страниц. От каждого домена нужно по одной странице.
Вообще запрос нужен намного сложнее, что-то вроде такого:
Но если, вообще говоря, включить режим «капитан-отвечает-только-на-заданный-вопрос»,
то должно хватить индекса на (`index`, `domain_id`, `index_date`).
Не хватило, выполняется 70 секунд. EXPLAIN говорит то же самое.
id select_type table type possible_keys key key_len ref rows Extra
1 SIMPLE pages index id index_date 4 NULL 286 Using where; Using temporary
П.С. Но спасибо за ответы )
Неактивен
Ну не правда. Было 700 строк, стало 300. Это больше, чем в два раза выигрыш
Хотя, конечно, поисковик так не напишешь.
Я правильно понимаю, что это не столько таблица страниц, сколько журнал таблицы
страниц. И каждый раз, когда страница индексируется, она добавляется в этот жур-
нал?
Попробуйте сначала написать запрос так, чтобы он содержал осмысленные значения.
Например, запрос с группировкой требует агрегатных функций над полями, не участ-
вующими в группировке (иначе выбирается *какое-то* значение, но не факт, что то,
которое нужно). Я имею в виду в первую очередь index_date.
Ну и, разумеется, начинайте думать над денормализацией. Когда работаете с таким
журналом, в любом случае нужно будет делать где-то денормализованную табличку.
Неактивен
Ну не особо ощущается этот выигрыш
paulus написал:
Я правильно понимаю, что это не столько таблица страниц, сколько журнал таблицы
страниц. И каждый раз, когда страница индексируется, она добавляется в этот жур-
нал?
Именно так..
paulus написал:
Ну и, разумеется, начинайте думать над денормализацией. Когда работаете с таким
журналом, в любом случае нужно будет делать где-то денормализованную табличку.
Да... Тут вообще по-хорошему нужна не одна СУБД и не я, а нормальный администратор БД, чтобы помог правильно настроить все
Пока выкрутился 2-мя временными таблицами, чтобы запросы попроще и побыстрее были. Но как-то криво...
paulus написал:
Попробуйте сначала написать запрос так, чтобы он содержал осмысленные значения.
Например, запрос с группировкой требует агрегатных функций над полями, не участ-
вующими в группировке (иначе выбирается *какое-то* значение, но не факт, что то,
которое нужно). Я имею в виду в первую очередь index_date.
А можно подробнее? Что значит осмысленные значения? Первый запрос уже не так важен, появился новый
http://pix.am/oPqh/
Но легче будет с первым разобраться. Чтобы EXPLAIN наконец сказал "using index". Все-таки не понимаю как ключи подбираются.
http://mysqldba.blogspot.com/2008/06/ho … y-and.html
Здесь нашел мою ситуацию, попробовал аналогично подобрать ключ, не получилось..
Спасибо.
Отредактированно revis0r (06.09.2011 02:30:52)
Неактивен
Осмысленные значения — это очень просто. Представьте, что у Вас есть
корзина с фруктами. Группировка выбирает тип фрукта (например, груша,
слива, виноград). Неосмысленный запрос: «выбери тип фрукта и его размер
из этой корзины». Осмысленный запрос: «выбери тип фрукта и максималь-
ный его размер из этой корзины».
Неактивен
Страниц: 1