Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Оптимизация запроса / 15 сообщений из 15, страница 1 из 1
29.11.2014, 16:46:27
    #38820318
anton.totsky
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Оптимизация запроса
Всем доброго времени суток!

Данный запрос выполняется за 0.00* сек.:
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
SELECT
	SQL_CALC_FOUND_ROWS t.id, t.*
FROM orders t
	JOIN property_value pv119_access_54795243f1cfb ON pv119_access_54795243f1cfb.element_id = t.id 
WHERE
	t.date_delete IS NULL AND (
		pv119_access_54795243f1cfb.property_id = 119 AND pv119_access_54795243f1cfb.value_id = 1
	)
GROUP BY t.id
ORDER BY t.date_create
DESC LIMIT 0,25



А вот этот уже 13 сек.:
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
SELECT
	SQL_CALC_FOUND_ROWS t.id, t.*
FROM orders t
	JOIN property_value pv119_access_54795243f1cfb ON pv119_access_54795243f1cfb.element_id = t.id 
	JOIN property_value pv36_access_54795243f1d8b ON pv36_access_54795243f1d8b.element_id = t.id
WHERE
	t.date_delete IS NULL AND (
		(pv36_access_54795243f1d8b.property_id = 36 AND pv36_access_54795243f1d8b.value_id = 23)
		OR (pv119_access_54795243f1cfb.property_id = 119 AND pv119_access_54795243f1cfb.value_id = 1)
	)
GROUP BY t.id
ORDER BY t.date_create
DESC LIMIT 0,25



Подскажите, пожалуйста, в какую сторону копать. Если необходимо предоставить индексы - напишу.

Заранее огромное спасибо за помощь!
...
Рейтинг: 0 / 0
29.11.2014, 21:40:04
    #38820405
Arhat109
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Оптимизация запроса
anton.totsky,

Покажите Explain второго запроса. Как понимаю, поиск сущности в EAV по тому или иному свойству, да ещё и из разных таблиц хранения свойств... нет?
...
Рейтинг: 0 / 0
29.11.2014, 23:27:17
    #38820463
anton.totsky
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Оптимизация запроса
Arhat109,
id select_type table type possible_keys key key_len ref rows Extra
1 SIMPLE t index PRIMARY PRIMARY 4 NULL 23760 Using where; Using temporary; Using filesort
1 SIMPLE pv119_access_54795243f1cfb ref property_id,element_id,property_id_2,element_id_2 element_id 4 u00002.t.id 6
1 SIMPLE pv36_access_54795243f1d8b ref property_id,element_id,property_id_2,element_id_2 element_id 4 u00002.pv119_access_54795243f1cfb.element_id 6 Using where

Таблица хранения свйоства одна - property_value
...
Рейтинг: 0 / 0
29.11.2014, 23:29:44
    #38820466
anton.totsky
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Оптимизация запроса
Подчищу запрос:
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
SELECT
	SQL_CALC_FOUND_ROWS t.id, t.*
FROM orders t
	JOIN property_value pv_1 ON pv_1.element_id = t.id 
	JOIN property_value pv_2 ON pv_1.element_id = t.id
WHERE
	t.date_delete IS NULL AND (
		(pv_1.property_id = 36 AND pv_1.value_id = 23)
		OR (pv_2.property_id = 119 AND pv_2.value_id = 1)
	)
GROUP BY t.id
ORDER BY t.date_create
DESC LIMIT 0,25
...
Рейтинг: 0 / 0
30.11.2014, 09:58:18
    #38820542
Arhat109
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Оптимизация запроса
anton.totsky,

Да, пропустил что таблица одна. Слишком длинные алиасы закрыли текст. Впрочем и Explain не показывает выборки в 13 сек... тип "ref", вторичных записей по 6 шт, всё индексировано. То что сканируется около 24тыс. объектов - не показатель.

но... возникает вопрос: А зачем использован второй джойн с таблицей свойств?
...
Рейтинг: 0 / 0
01.12.2014, 11:03:50
    #38821134
anton.totsky
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Оптимизация запроса
Arhat109,

Интересный вопрос %)
Просто property_value pv и везде использовал pv, что-то непонятно почему в логике построения у меня неск. джоинов

Спасибо!
...
Рейтинг: 0 / 0
01.12.2014, 16:20:40
    #38821544
anton.totsky
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Оптимизация запроса
Arhat109,

Теперь возникла проблема, не выбирает записи:
Код: sql
1.
SELECT SQL_CALC_FOUND_ROWS t.id, t.* FROM flying_plan t JOIN property_value pv ON pv.element_id = t.id WHERE (t.date_delete IS NULL) AND (pv.value_datetime <= '2014-11-05 23:59:59' AND pv.property_id = 93) AND (pv.value_id = 1 AND pv.property_id = 90)



Хотя по отдельности:
Код: sql
1.
(pv.value_datetime <= '2014-11-05 23:59:59' AND pv.property_id = 93)


Код: sql
1.
(pv.value_id = 1 AND pv.property_id = 90)



Выбираются и в первом и втором случае записи пересекаются. Раньше работало, когда было несколько джоинов.

;(
...
Рейтинг: 0 / 0
01.12.2014, 16:31:23
    #38821558
Arhat109
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Оптимизация запроса
anton.totsky,

не удивительно. Вы условие поменяли с ИЛИ на И и ждете того же самого результату? Вертайте "взад" обе пары по или только из одной таблички и будет вам "щастье". :)
...
Рейтинг: 0 / 0
01.12.2014, 16:34:25
    #38821564
anton.totsky
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Оптимизация запроса
Arhat109,

> обе пары по или только из одной таблички
не понял..
...
Рейтинг: 0 / 0
01.12.2014, 16:35:29
    #38821565
anton.totsky
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Оптимизация запроса
anton.totsky,

А, блин, суть-то я понял, там у меня ИЛИ на выборку доступных, а тут фильтр И
...
Рейтинг: 0 / 0
01.12.2014, 17:54:55
    #38821724
Arhat109
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Оптимизация запроса
anton.totsky,

:) Бывает.
...
Рейтинг: 0 / 0
01.12.2014, 18:09:56
    #38821757
javajdbc
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Оптимизация запроса
возможно "OR" убивает возможность
использования индексов. Попробийте преобазовать

Код: sql
1.
2.
3.
SELECT *
FROM T
WHERE A or B



в

Код: sql
1.
2.
3.
4.
5.
6.
7.
SELECT *
FROM T
WHERE A 
UNION
SELECT *
FROM T
WHERE B
...
Рейтинг: 0 / 0
01.12.2014, 21:30:08
    #38821977
anton.totsky
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Оптимизация запроса
javajdbc, Arhat109,

Я вернул все как было в блоке фильтрации, а в блоке выборки доступных (где ИЛИ), оставил, как переделал с утра. В итоге все работает, как и работало + место двойного джоина остался один, и долгих запросов не осталось :)

Взял на заметку про UNION, спасибо большое за помощь!
...
Рейтинг: 0 / 0
01.12.2014, 21:45:17
    #38821988
Arhat109
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Оптимизация запроса
anton.totsky,

Обратите внимание на свой Explain двойного джойна: там второй джойн индексируется ... вдоль первого, а вовсе не главной таблички. Может из-за этого были тормоза? Только непонятно КАК оно так указалось ...
...
Рейтинг: 0 / 0
06.12.2014, 12:10:30
    #38826927
anton.totsky
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Оптимизация запроса
Arhat109,

Мне уже тем более не понятно :D
...
Рейтинг: 0 / 0
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Оптимизация запроса / 15 сообщений из 15, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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