powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Ускорение запроса
11 сообщений из 11, страница 1 из 1
Ускорение запроса
    #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
Ускорение запроса
    #39169358
miksoft
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
lekareon,

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

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

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

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

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

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

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

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

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

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

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

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


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