Задавайте вопросы, мы ответим
Вы не зашли.
Запрос и структуру таблички — в студию
Неактивен
Запрос:
Отредактированно Proger (16.04.2009 22:25:28)
Неактивен
Если такая же, как в сообщении 23, то ничего удивительного, что filesort:
у Вас нет индекса по тем полям, которые Вы просите в сортировке.
Неактивен
Неактивен
Оо, я проглядел. У Вас зверек «pinned» стал вдруг «notpinned». Из-за этого Вам опять нужно
сортировать в разном порядке. У меня со «старой структурой» получается вот так:
[celestia] root test > EXPLAIN SELECT STRAIGHT_JOIN t1. * FROM topic t2 FORCE INDEX ( pinned ) JOIN topic t1 FORCE INDEX ( PRIMARY ) USING ( id ) WHERE ( t1.fid IN ( 5, 7 ) ) ORDER BY t2.pinned DESC, t2.last_post_time DESC LIMIT 0 , 25; +----+-------------+-------+--------+---------------+---------+---------+------------+------+-------------+ | id | select_type | table | type | possible_keys | key | key_len | ref | rows | Extra | +----+-------------+-------+--------+---------------+---------+---------+------------+------+-------------+ | 1 | SIMPLE | t2 | index | NULL | pinned | 9 | NULL | 5 | Using index | | 1 | SIMPLE | t1 | eq_ref | PRIMARY | PRIMARY | 4 | test.t2.id | 1 | Using where | +----+-------------+-------+--------+---------------+---------+---------+------------+------+-------------+ 2 rows in set (0.00 sec)
Сортировка в одну сторону, поэтому использует индекс. WHERE не использует индекс, ну и фиг с ним
UPD: А, да, не написал:
KEY `pinned` (`pinned`,`last_post_time`)
Неактивен
ээм... как раз таки с полем pinned где 1 это да 0 нет, у меня получилось что тоже нужно делать две сортировки, потому сменил на notpinned и сортировка как вы видите в представленном запросе идет в одну сторону.
При таких действиях я основывался на реальной работе запроса, просто вставляя его в ленту форума и смотря также темы лежат, как при старом "кривом" запросе или нет.
Отредактированно Proger (17.04.2009 15:41:23)
Неактивен
Ну, если у Вас два сложных запроса в разные стороны, возможно, прийдется пойти на денормализацию
данных и хранить оба значения (ну и, разумеется, следить за консистентностью как-то еще).
Неактивен
Запросов у меня всего к этой таблице (ну естесвенно подобного рода только) 2. Один выводит темы конкретного форума, где можно листать по бескочесности, а второй выводит ленту форума. И в обоих случаях используется только такая сортировка (в одну сторону DESC BY pinned, last_post_time) потому я несколько вас не понимаю про денормализацию. Попробую ещё поэспериментировать, но что-то я запутался немного.
Неактивен
Если всегда прилепленные должны быть сверху и сортировка по дате всегда в обратном порядке,
то Вам нужен только pinned и сортировка, соответственно, pinned DESC, last_post_time DESC.
Неактивен