SQLinfo.ru - Все о MySQL

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

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

Вы не зашли.

#1 24.03.2016 15:11:35

Manolito
Участник
Зарегистрирован: 24.03.2016
Сообщений: 2

Уменьшение время выполнения запроса

Всем привет. Я столкнулся со следующей проблемой: есть таблица с учениками (Уникальный идентификатор, ФИО) и есть таблица с записями их участия в олимпиадах (Уникальный идентификатор записи, уникальный идентификатор ученика, ..... , количество баллов за участие). Требуется вывести для каждого ученика количество участий в олимпиадах и суммарный балл за них. Решил проблему так:

Код:

SELECT 
    pupils.ID,
    CONCAT(pupils.Subname,' ',pupils.Name,' ',pupils.Aftername) as `Pupil`,
    COUNT(*) as `CountOlymp`,
        SUM(records.Rate) as `Rating` 
        FROM `pupils` LEFT JOIN `records` on records.PupID=pupils.ID GROUP BY pupils.ID

Вроде бы все работает, но вот время исполнения около 2 секунд.
Количество записей в таблице pupils (ученики): 1370
Количество записей в таблице records (записи): 840
Можно ли как-нибудь упростить/облегчить этот запрос?

Неактивен

 

#2 24.03.2016 15:14:08

deadka
Администратор
Зарегистрирован: 14.11.2007
Сообщений: 2422

Re: Уменьшение время выполнения запроса

Доброго дня! Покажите explain запроса. На полях records.PupID и pupils.ID есть индексы?


Зеленый свет для слабаков, долги отдают только трусы, тру гики работают только в консоли...

Неактивен

 

#3 24.03.2016 15:38:09

Manolito
Участник
Зарегистрирован: 24.03.2016
Сообщений: 2

Re: Уменьшение время выполнения запроса

Забыл добавить индекс в records.PupID... Спасибо)

Неактивен

 

Board footer

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