Модераторы: skyboy
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Оптимизировать запрос 
:(
    Опции темы
Fubu_By
Дата 8.10.2015, 12:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 290
Регистрация: 14.2.2007

Репутация: нет
Всего: 0



Есть база с 9 мил. записей. Делаю из нее такую вот выборку
Код

 SELECT `origin_ru` , `destination_ru` , `depart_date_month` AS `month` , `depart_date` , MIN( `value` ) AS `price`
FROM `flights`
WHERE `origin` = 'MSQ'
AND `destination` = 'MOW'
AND `return_date` != '0000-00-00'
AND `depart_date_year` = '2015'
GROUP BY `depart_date_month`
ORDER BY `depart_date_month` ASC


Explain выдает такой вот ответ
Код

id select_type    table    type    possible_keys                               key      key_len  ref    rows    Extra
1  SIMPLE        flights   range  origin,destination,destination_3,origin_4    origin_4    21     NULL   234      Using where; Using temporary; Using filesort


Ключ origin_4 состоит из: origin + destination + return_date + depart_date_year + depart_date_month

Результат запроса вот такой во получается

Код

origin_ru    destination_ru    month    depart_date    price
Минск    Москва    1    2015-01-02    129
Минск    Москва    2    2015-02-03    81
Минск    Москва    3    2015-03-06    78
Минск    Москва    4    2015-04-03    81
Минск    Москва    5    2015-05-01    101
Минск    Москва    6    2015-06-02    107
Минск    Москва    7    2015-07-01    112
Минск    Москва    8    2015-08-03    109
Минск    Москва    9    2015-09-01    117
Минск    Москва    11    2015-11-01    102
Минск    Москва    12    2015-12-03    108
  • можно ли оптимизировать еще этот запрос, избавится от Using temporary и Using filesort, и как?
  • нужен ли в ключе origin_4 последнее поле depart_date_month? использует ли его группировка?

Добавлено через 13 минут и 5 секунд
Кстати если из запроса убрать эту строку
Код

ORDER BY `depart_date_month` ASC


то все равтоно происходит Using filesort. Это для GROUP BY как я понимаю производится

Это сообщение отредактировал(а) Fubu_By - 8.10.2015, 12:22


--------------------
PM MAIL WWW   Вверх
Akina
Дата 8.10.2015, 12:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Советчик
****


Профиль
Группа: Модератор
Сообщений: 20581
Регистрация: 8.4.2004
Где: Зеленоград

Репутация: 106
Всего: 454



Во-первых, трансформируйте условие в 
Код

AND `return_date` > '0000-00-00'

Во-вторых, посмотрите, как серверу понравятся индексы:
(origin, destination, depart_date_year, return_date)
(origin, destination, depart_date_year, return_date, depart_date_month, value)
В третьих, сортировка по depart_date_month будет выполнена вне зависимости от того, указываете вы её или нет. См. справку по GROUP BY.


--------------------
 О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума.

PM MAIL WWW ICQ Jabber   Вверх
Fubu_By
Дата 8.10.2015, 13:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 290
Регистрация: 14.2.2007

Репутация: нет
Всего: 0



Цитата(Akina @ 8.10.2015,  12:50)
Во-первых, трансформируйте условие в 
Код

AND `return_date` > '0000-00-00'


тогда дальше return_date индекс использоваться не будет


--------------------
PM MAIL WWW   Вверх
Akina
Дата 8.10.2015, 14:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Советчик
****


Профиль
Группа: Модератор
Сообщений: 20581
Регистрация: 8.4.2004
Где: Зеленоград

Репутация: 106
Всего: 454



А он и так не будет использоваться "дальше". Но в случае "!=" он и по этому полю вряд ли будет использоваться.


--------------------
 О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума.

PM MAIL WWW ICQ Jabber   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | MySQL | Следующая тема »


 




[ Время генерации скрипта: 0.0440 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.