SQLinfo.ru - Все о MySQL

Форум пользователей MySQL

Задавайте вопросы, мы ответим

Вы не зашли.

#1 10.07.2009 01:23:42

Proger
Активист
Откуда: Санкт-Петербург
Зарегистрирован: 04.09.2008
Сообщений: 172

UNION using filesort

Здраствуйте.
Проблемка со следующим запросом:

EXPLAIN SELECT  `text` ,  `date` ,  `editdate` ,  `aid` ,  `tid`
FROM  `forum`.`post`
UNION SELECT  `text` ,  `date` ,  `editdate` ,  `aid` ,  `id` AS  `tid`
FROM  `forum`.`topic`
ORDER BY  `date` DESC


EXPLAIN пишет:
1    PRIMARY    post    ALL    NULL    NULL    NULL    NULL    716    
2    UNION    topic    ALL    NULL    NULL    NULL    NULL    129    
NULL    UNION RESULT    <union1,2>    ALL    NULL    NULL    NULL    NULL    NULL    Using filesort

Индекс на date в обоих таблицах есть, а что ещё ему нужно?
Боязнь вызывает то что в небольшом форуме уже есть запрос, который думает 0.05 сек при выводе 10 строк всего лишь. Конечно есть варианты кешировать эту страницу, но просто интересно, в чем тут дело, может я что-то неправильно делаю ?

Заранее спасибо!

Неактивен

 

#2 10.07.2009 17:04:25

paulus
Администратор
MySQL Authorized Developer and DBA
Зарегистрирован: 22.01.2007
Сообщений: 6756

Re: UNION using filesort

Ну он, очевидно, хочет сортировать весь UNION — попробуйте поставить скобки.

Неактивен

 

#3 12.07.2009 02:04:35

Proger
Активист
Откуда: Санкт-Петербург
Зарегистрирован: 04.09.2008
Сообщений: 172

Re: UNION using filesort

EXPLAIN (SELECT  `TEXT` ,  `DATE` ,  `editdate` ,  `aid` ,  `tid`
FROM  `forum`.`post`)
UNION (SELECT  `TEXT` ,  `DATE` ,  `editdate` ,  `aid` ,  `id` AS  `tid`
FROM  `forum`.`topic`)
ORDER BY  `DATE` DESC

что-то тоже самое. Может сами запросы сменить? Просто у меня 2 таблички как видно. Поля все одинаковые кроме id-tid в таблице topic мне нужно выбрать скажем 20 строк с обратной сортировкой по дате, может есть оптимальней способы?

Неактивен

 

#4 13.07.2009 08:47:58

Proger
Активист
Откуда: Санкт-Петербург
Зарегистрирован: 04.09.2008
Сообщений: 172

Re: UNION using filesort

Изменились несколько условия задачи...
Ну вот таков запрос:
SELECT `text`, `date`, `editdate`, `aid`, `tid` FROM `forum`.`post` WHERE `gid` = 1 AND `fid` IN(1, 2, 3, 6, 4, 5, 7) UNION SELECT `text`, `date`, `editdate`, `aid`, `id` as `tid` FROM `forum`.`topic` WHERE `gid` = 1 AND `fid` IN(1, 2, 3, 6, 4, 5, 7) ORDER BY `date` DESC LIMIT 0 , 50
Индекс на gid, fid, date в обоих таблицах, эксплаин радовать больше начал:
1    PRIMARY    post    ref    date    date    4    const    170    Using where
2    UNION    topic    ref    gid,date    date    4    const    7    Using where
NULL    UNION RESULT    <union1,2>    ALL    NULL    NULL    NULL    NULL    NULL    Using filesort

Неактивен

 

Board footer

Работает на PunBB
© Copyright 2002–2008 Rickard Andersson