Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Помощь в оптимизации MySQL запроса / 11 сообщений из 11, страница 1 из 1
20.03.2015, 15:17:27
    #38911208
adrocket
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помощь в оптимизации MySQL запроса
Здравствуйте!

В связи с резким увеличением количества записей в таблице SQL запрос стал ооочень медленным, и вешает сервер.

Запрос(выполняется более 2-х минут): http://pastebin.com/FS7sScaG

И его EXPLAIN: https://www.dropbox.com/s/3w7cbiugkoxqh1h/explain.png?dl=0


Как я понимаю, все тормоза из-за того что не используется pripary key из таблицы users. А вот почему?
...
Рейтинг: 0 / 0
20.03.2015, 15:22:37
    #38911217
adrocket
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помощь в оптимизации MySQL запроса
Упростил запрос до минимума:

EXPLAIN EXTENDED SELECT SQL_NO_CACHE
objects.*,
users.*
FROM objects
JOIN users ON users.id = objects.user_id

Все равно users перебирается полностью, не используется никакой ключ.
...
Рейтинг: 0 / 0
20.03.2015, 15:26:04
    #38911222
adrocket
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помощь в оптимизации MySQL запроса
Сорри за pastebin.

Вот запрос:

Код: sql
1.
2.
3.
4.
5.
EXPLAIN EXTENDED SELECT SQL_NO_CACHE
	objects.*,
	users.*
FROM objects 
JOIN users ON users.id = objects.user_id
...
Рейтинг: 0 / 0
20.03.2015, 15:27:40
    #38911223
adrocket
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помощь в оптимизации MySQL запроса
И вот EXPLAIN.
...
Рейтинг: 0 / 0
20.03.2015, 15:53:01
    #38911256
ScareCrow
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помощь в оптимизации MySQL запроса
вам правда нужны ВСЕ данные при условии "увеличением количества записей "?
...
Рейтинг: 0 / 0
20.03.2015, 15:54:40
    #38911260
Arhat109
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помощь в оптимизации MySQL запроса
adrocket,

В последнем Иксплейне - используется, вполне себе ронмально. По ссылкам не ходил.
...
Рейтинг: 0 / 0
20.03.2015, 15:57:13
    #38911266
adrocket
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помощь в оптимизации MySQL запроса
ScareCrow,

Да, все данные нужны, так как происходит экспорт в XML фид.
...
Рейтинг: 0 / 0
20.03.2015, 15:58:03
    #38911269
adrocket
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помощь в оптимизации MySQL запроса
Arhat109,

Не понимаю, почему нормально, если не используется ключ для поиска, а вместо этого перебирается вся таблица?
...
Рейтинг: 0 / 0
20.03.2015, 16:02:27
    #38911271
Arhat109
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помощь в оптимизации MySQL запроса
adrocket,

Там почти по-русски писано, что ключи (где можно) - используются. У вас нет никаких условий на users, поэтому и ALL. :)
...
Рейтинг: 0 / 0
20.03.2015, 16:08:24
    #38911282
adrocket
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помощь в оптимизации MySQL запроса
Arhat109,

Оу, видимо я подтупляю, простите :)

Я нашел еще 1 причину потенциальную, это 'GROUP BY' и как следствие используется временная таблица, которая, видимо дампится на диск ну и тп.

Мой полный запрос:

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
SELECT SQL_NO_CACHE
		a.*,
        i.object_id,
        u.phone, u.first_name AS first_name, u.email AS user_email, u.user_type,
        ag.name AS agency_name, ag.phone AS agency_phone, ag.email AS agency_email, ag.url AS agency_site,
    IFNULL(i.object_id, UUID()) AS unq_ancestor,
    GROUP_CONCAT(i.gen_name, '.jpg' SEPARATOR ';') AS image_name
FROM
    objects a
    LEFT JOIN object_images i ON a.id = i.object_id
         JOIN users  u ON u.id = a.user_id
    LEFT JOIN organizations ag ON ag.id = u.organization_id
WHERE
    a.object_status = 2
    AND a.object_type IN (1, 2, 3, 4)
GROUP BY a.id



Смысл в том что у каждого объекта могут быть картинки, и я из склеиваю через ';' в эту же строку.

Может подскажите, это оптимизируемо? :)
...
Рейтинг: 0 / 0
20.03.2015, 16:22:35
    #38911308
adrocket
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помощь в оптимизации MySQL запроса
Я конечно могу не группировать по object.id и тогда у меня будут повторяться строки из object в выборке, обрабатывать это уже в коде, но кто-то мне это не нравится. Ведь SQL такая мощная вещь, и структура БД у меня вроде более или менее валидная..
...
Рейтинг: 0 / 0
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Помощь в оптимизации MySQL запроса / 11 сообщений из 11, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]