SQLinfo.ru - Все о MySQL

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

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

Вы не зашли.

#1 14.03.2011 19:24:59

dickens
Участник
Зарегистрирован: 14.03.2011
Сообщений: 3

не получается избавиться от filesort

Подскажите.

есть 2 таблицы.

ent и ent_order, предприятия и порядок_предприятий соответсвенно.

выполняю вот такой запрос

explain select * from ent,ent_order where ent_order.ent_id=ent.id
and concat_ws(' ',nam,typ,obl,zip,city,addr,code,tel,email,url,biz) like "%работы%"[
and dat<='2011-03-14' 
and avail='1'
order by banner, avr_mark

есть filesort

если убираю  order by banner, avr_mark 

filesort исчезает.

по обоим полям banner и avr_mark есть индексы.

помогите, пожалуйста.

заранее спасибо.

Неактивен

 

#2 14.03.2011 19:43:56

vasya
Архат
MySQL Authorized Developer
Откуда: Орел
Зарегистрирован: 07.03.2007
Сообщений: 5842

Re: не получается избавиться от filesort

Результат эксплэйна приведите, а также show create table для обеих таблиц.

Неактивен

 

#3 14.03.2011 22:59:04

dickens
Участник
Зарегистрирован: 14.03.2011
Сообщений: 3

Re: не получается избавиться от filesort

да, конечно


CREATE TABLE `ent` (
`id` int(7) NOT NULL auto_increment,
`dat` date NOT NULL,
`nam` varchar(255) NOT NULL,
`typ` varchar(255) NOT NULL,
`obl` varchar(100) NOT NULL,
`zip` varchar(20) NOT NULL,
`city` varchar(100) NOT NULL,
`addr` varchar(255) NOT NULL,
`code` varchar(100) NOT NULL,
`tel` text,
`email` varchar(200) NOT NULL,
`url` varchar(100) NOT NULL,
`biz` text NOT NULL,
`addit` text NOT NULL,
`addit2` text NOT NULL,
`avail` int(1) NOT NULL default '1',
`url_name` varchar(255) NOT NULL,
PRIMARY KEY  (`id`),
UNIQUE KEY `url_name` (`url_name`),
KEY `nam` (`nam`)
) ENGINE=MyISAM AUTO_INCREMENT=48682 DEFAULT CHARSET=cp1251


CREATE TABLE `ent_order` (
`ent_id` int(7) NOT NULL,
`avr_mark` float NOT NULL,
`banner` int(2) NOT NULL,
PRIMARY KEY  (`ent_id`),
KEY `avr_mark` (`avr_mark`),
KEY `banner` (`banner`)
) ENGINE=MyISAM DEFAULT CHARSET=cp1251


id     select_type     table     type     possible_keys     key     key_len     ref     rows     Extra
1     SIMPLE     ent_order     ALL     PRIMARY     NULL     NULL     NULL     46702     Using filesort
1     SIMPLE     ent     eq_ref     PRIMARY     PRIMARY     4     bizbyru_1.ent_order.ent_id     1     Using where


вот, посмотрите пож-та

Неактивен

 

#4 14.03.2011 23:38:52

vasya
Архат
MySQL Authorized Developer
Откуда: Орел
Зарегистрирован: 07.03.2007
Сообщений: 5842

Re: не получается избавиться от filesort

Попробуйте:

alter table `ent_order` add key(`banner`,`avr_mark`,`ent_id`);

Неактивен

 

#5 14.03.2011 23:42:28

dickens
Участник
Зарегистрирован: 14.03.2011
Сообщений: 3

Re: не получается избавиться от filesort

да, помогло. спасибо.


а, попробовал выполнить вот такой запрос и снова получаю  filesort


EXPLAIN SELECT *
FROM ent, ent_order
WHERE ent_order.ent_id = ent.id
ORDER BY banner DESC , avr_mark DESC, nam

я так понимаю, что в этом запросе ещё добавляется сортировка по полю nam, которое из таблицы ent

можно как-то избавиться от этого filesort?

Отредактированно dickens (14.03.2011 23:48:52)

Неактивен

 

#6 15.03.2011 00:19:27

vasya
Архат
MySQL Authorized Developer
Откуда: Орел
Зарегистрирован: 07.03.2007
Сообщений: 5842

Re: не получается избавиться от filesort

dickens написал:

можно как-то избавиться от этого filesort?

Нет

Неактивен

 

Board footer

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