Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Ускорение запроса / 11 сообщений из 11, страница 1 из 1
12.02.2016, 11:28:19
    #39169354
lekareon
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Ускорение запроса
Доброго дня

Прошу у вас помощи в ускорении запроса. Выполняет мучительно долго уже при двух фильтрах, а их может быть 10+.

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

Суть
Есть 5 главных таблиц и еще 10 дополняющих (в дополняющих хранятся только уникальный id и title)
В трёх главных есть уникальный id, две остальные его не имеют, но привязаны к одной из двух имеющей уникальный id + содержат id к второстепенной таблице.

Структура
Три из самых главных имеют вид
apartment ( id, building... )
building ( id, builder, district, steet... )
district ( id, town... )

Две остальные
metros ( metro_id, district_id... )
banks ( bank_id, building_id... )

Остальные же имеют вид типа
town ( id, title )
street ( id, title )
...

Сам запрос
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
SELECT 
	apartment.id, 
	apartment.building, 
	/*Далее другие поля apartment*/

	/*Далее другие поля второстепенных таблиц*/

	building.id AS building_id,
	street.title AS street_title,
	/*Далее другие поля building*/

	district.id AS district_id,
	district.town AS district_town,
	/*Далее другие поля district*/

	metro.id AS metro_id,

FROM
	apartment
		LEFT JOIN building ON apartment.building = building.id
				
		LEFT JOIN builder ON building.builder = builder.id
		/*Тут ещё связи второстепенных таблиц с builder */
		LEFT JOIN street ON building.street = street.id

				
		/*district*/
		LEFT JOIN district ON building.district = district.id
		/*Тут ещё связи второстепенных таблиц с district */
		LEFT JOIN metros ON metros.district_id = district.id
		LEFT JOIN metro ON metros.metro_id = metro.id

		/*apartment*/
		/*Тут ещё связи второстепенных таблиц с apartment*/

	
ORDER BY apartment.id DESC
LIMIT 30"



Ко всем таблицам тянусь через LEFT JOIN. Другого метода не нашёл, но уверен что он есть.
Сейчас с лефтами он приходит за 7 секунд. Естественно такое дело не годится + ещё нужно добавить пару таблиц на вроде metros, и при условии некоторого кол-во фильтров, дело может и на минуту растянутся.
Подскажите пожалуйста, в какую сторону хотя бы копать.
База содержит 60к строк в apartment
...
Рейтинг: 0 / 0
12.02.2016, 11:30:05
    #39169358
miksoft
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Ускорение запроса
lekareon,

Покажите план запроса.
...
Рейтинг: 0 / 0
12.02.2016, 11:38:10
    #39169367
lekareon
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Ускорение запроса
miksoftlekareon,

Покажите план запроса.

Вы про это?
Картинка
...
Рейтинг: 0 / 0
12.02.2016, 11:42:13
    #39169376
lekareon
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Ускорение запроса
Наверно поспешил с ответом.
Я не составлял план. Только рисовал взаимосвязь таблиц. Вам он нужен?
...
Рейтинг: 0 / 0
12.02.2016, 11:42:57
    #39169378
miksoft
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Ускорение запроса
lekareon,

Добавьте слово EXPLAIN перед запросом и выполните его. Результат покажите.
...
Рейтинг: 0 / 0
12.02.2016, 11:48:16
    #39169393
lekareon
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Ускорение запроса
miksoft,

...
Рейтинг: 0 / 0
12.02.2016, 12:02:18
    #39169417
tanglir
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Ускорение запроса
lekareon,

смотрите на все таблицы, где type=ALL (кроме основной)
скорее всего, вы их ни с чем не связали
...
Рейтинг: 0 / 0
12.02.2016, 12:13:11
    #39169434
XsevenBeta
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Ускорение запроса
Какой профилёр такие картинки строит красивые?:)
...
Рейтинг: 0 / 0
12.02.2016, 12:22:25
    #39169452
lekareon
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Ускорение запроса
XsevenBetaКакой профилёр такие картинки строит красивые?:)
phpMyAdmin
...
Рейтинг: 0 / 0
12.02.2016, 12:45:18
    #39169481
lekareon
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Ускорение запроса
tanglirlekareon,

смотрите на все таблицы, где type=ALL (кроме основной)
скорее всего, вы их ни с чем не связали

Снимаю шляпу. Эффект поразителен. С 13 секунд до 120мс. Еще немного урезал тип полей. Кеш тоже стал возвращаться на 4мс быстрее, теперь 8мс.

Спасибо огромное, буду знать.
...
Рейтинг: 0 / 0
13.02.2016, 21:07:16
    #39170462
MasterZiv
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Ускорение запроса
lekareon,

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

тут у меняjoin,тут еще что-то, тут у меня еще какие-то второстепенные таблицы....

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


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