SQLinfo.ru - Все о MySQL Webew.ru: теория и практика веб-технологий

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

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

Вы не зашли.

#1 26.01.2011 21:54:22

Марк
Активист
Зарегистрирован: 31.05.2010
Сообщений: 157

Оптимизация запроса на выборку из двух таблиц с сортировкой.

Здравствуйте... Есть ли способ оптимизировать данный запрос...

select b.`name`,s.visits from `skeleton`s,`tb`b  where b.id=s.id order by s.`visits` desc limit 10;

Если убрать
order by s.`visits` desc
то работает быстро...
В таблицах по миллиону записей..

Неактивен

 

#2 27.01.2011 03:15:53

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

Re: Оптимизация запроса на выборку из двух таблиц с сортировкой.

Ну, и если сделать индексы на s(visits), b(id), то тоже работает быстро smile

Неактивен

 

#3 27.01.2011 10:56:14

Марк
Активист
Зарегистрирован: 31.05.2010
Сообщений: 157

Re: Оптимизация запроса на выборку из двух таблиц с сортировкой.

Та индексы есть...

CREATE TABLE IF NOT EXISTS `skeleton` (
`id` INT UNSIGNED AUTO_INCREMENT NOT NULL,
`1` VARCHAR(13) NULL,
`2` VARCHAR(13) NULL,
`3` VARCHAR(13) NULL,
`visits` INT UNSIGNED DEFAULT 0,
PRIMARY KEY (id),
INDEX(`1`),
INDEX(`2`),
INDEX(`3`),
INDEX(`visits`)
) ENGINE=MyISAM CHARACTER SET=utf8 AUTO_INCREMENT=1;

CREATE TABLE IF NOT EXISTS `tb` (
`id` INT UNSIGNED NOT NULL,
`name` VARCHAR(255) NULL,
`description` TEXT NULL,
`language` enum('0','1') not null,
PRIMARY KEY (id)
) ENGINE=MyISAM CHARACTER SET=utf8 AUTO_INCREMENT=1;

Неактивен

 

#4 28.01.2011 01:37:18

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

Re: Оптимизация запроса на выборку из двух таблиц с сортировкой.

А EXPLAIN от запроса покажите?

Неактивен

 

#5 28.01.2011 01:53:23

Марк
Активист
Зарегистрирован: 31.05.2010
Сообщений: 157

Re: Оптимизация запроса на выборку из двух таблиц с сортировкой.

Конечно... )) в этих таблицах по 200 000 записей

Отредактированно Марк (28.01.2011 01:55:32)


Прикрепленные файлы:
Attachment Icon explain.png, Размер: 17,048 байт, Скачано: 557

Неактивен

 

#6 28.01.2011 02:12:14

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

Re: Оптимизация запроса на выборку из двух таблиц с сортировкой.

Хммм.. странно его переколбашивает, при Ваших индексах (они не отключены
на skeleton, случаем?) должно бы нормально работать.

Попробуйте вот так:
SELECT STRAIGHT_JOIN b.`name`,s.visits
FROM `skeleton`s JOIN`tb`b USING(id)
ORDER BY s.`visits` DESC LIMIT 10;

Неактивен

 

#7 28.01.2011 09:47:59

Марк
Активист
Зарегистрирован: 31.05.2010
Сообщений: 157

Re: Оптимизация запроса на выборку из двух таблиц с сортировкой.

Ваш запрос в три раза быстрее работает(6 сек)... с такими же таблицами на другом компе делал запросы работает всё быстро... Таблицы динамические каждый день создаются заново, поэтому стоит обновить их и всё...
Так что спасибо, разобрался..

Неактивен

 

Board footer

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