SQLinfo.ru - Все о MySQL

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

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

Вы не зашли.

#1 01.08.2009 11:25:19

dead
Участник
Зарегистрирован: 16.08.2008
Сообщений: 14

Оптимизация запроса

Есть таблица с тремя полями, скажем:
a - id объекта
b - id группы свойств этого объекта
c - свойства

Задача получить максимальные значения поля b для каждого объекта. Делается это так:
SELECT a, MAX(b) FROM tbl GROUP BY a

Но все дело в том, что  этот запрос избыточен по своей логике. Хотелось бы его подточить под специфику данных. А специфика данных такова, что строк данных с одинаковым значением поля b довольно много. Напоминаю, что это поле группирует разные свойства поля "c". Например, выборка для объекта a=1:
a b c
1 1 1
1 1 2
1 1 3
1 1 4
1 2 5
1 2 6
1 2 7
1 2 8

Я так понимаю, что mysql с запрос "GROUP BY a" просматривает (группирует) все записи, а потом в них ищет максимум. Если же сделать

SELECT a,DISTINCT b FROM tbl

то получится малюсенькая табличка, в которой найти максимальные значения очень быстро. Наконец вопрос: как сделать выборку с DISTINCT, а потом найти максимум?

Неактивен

 

#2 01.08.2009 11:28:13

dead
Участник
Зарегистрирован: 16.08.2008
Сообщений: 14

Re: Оптимизация запроса

Добавлю: проводил замеры вышеприведенных двух запросов,  разница на порядок и больше.  Тут дело в специфике данных.

Неактивен

 

#3 01.08.2009 17:31:00

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

Re: Оптимизация запроса

create temporary table tmp select a, distinct b from tbl;
select a, max(b) from tmp group by a;
drop table tmp;

Неактивен

 

#4 01.08.2009 20:15:36

dead
Участник
Зарегистрирован: 16.08.2008
Сообщений: 14

Re: Оптимизация запроса

Спасибо

Неактивен

 

Board footer

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