SELECT COUNT(*) FROM (SELECT node.nid AS nid
FROM node node
INNER JOIN term_node term_node_value_0 ON node.vid = term_node_value_0.vid AND term_node_value_0.tid = 49
LEFT JOIN content_field_qwe node_data_field_qwe ON node.vid = node_data_field_qwe.vid
LEFT JOIN content_field_experience node_data_field_experience ON node.vid = node_data_field_experience.vid
INNER JOIN content_field_rty node_data_field_rty ON node.vid = node_data_field_rty.vid
INNER JOIN content_field_mnb node_data_field_mnb ON node.vid = node_data_field_mnb.vid
INNER JOIN content_field_hgfn node_data_field_hgfn ON node.vid = node_data_field_hgfn.vid
INNER JOIN content_field_smoking node_data_field_smoking ON node.vid = node_data_field_smoking.vid
INNER JOIN content_field_worktime node_data_field_worktime ON node.vid = node_data_field_worktime.vid
INNER JOIN content_field_livein node_data_field_livein ON node.vid = node_data_field_livein.vid
INNER JOIN content_field_language node_data_field_language ON node.vid = node_data_field_language.vid
INNER JOIN content_field_uio node_data_field_uio_value_0 ON node.vid = node_data_field_uio_value_0.vid AND node_data_f$
INNER JOIN content_field_uio node_data_field_uio_value_1 ON node.vid = node_data_field_uio_value_1.vid AND node_data_f$
INNER JOIN content_field_uio node_data_field_uio_value_2 ON node.vid = node_data_field_uio_value_2.vid AND node_data_f$
INNER JOIN content_field_uio node_data_field_uio_value_3 ON node.vid = node_data_field_uio_value_3.vid AND node_data_f$
INNER JOIN content_field_uio node_data_field_uio_value_4 ON node.vid = node_data_field_uio_value_4.vid AND node_data_f$
INNER JOIN content_field_uio node_data_field_uio_value_5 ON node.vid = node_data_field_uio_value_5.vid AND node_data_f$
INNER JOIN content_field_uio node_data_field_uio_value_6 ON node.vid = node_data_field_uio_value_6.vid AND node_data_f$
INNER JOIN content_field_uio node_data_field_uio_value_7 ON node.vid = node_data_field_uio_value_7.vid AND node_data_f$
INNER JOIN content_field_uio node_data_field_uio_value_8 ON node.vid = node_data_field_uio_value_8.vid AND node_data_f$
INNER JOIN content_field_uio node_data_field_uio_value_9 ON node.vid = node_data_field_uio_value_9.vid AND node_data_f$
INNER JOIN content_field_uio node_data_field_uio_value_10 ON node.vid = node_data_field_uio_value_10.vid AND node_data$
INNER JOIN content_field_uio node_data_field_uio_value_11 ON node.vid = node_data_field_uio_value_11.vid AND node_data$
INNER JOIN content_field_uio node_data_field_uio_value_12 ON node.vid = node_data_field_uio_value_12.vid AND node_data$
INNER JOIN content_field_uio node_data_field_uio_value_13 ON node.vid = node_data_field_uio_value_13.vid AND node_data$
WHERE (node.type IN ('xxxxx')) AND (node.status <> 0) AND (term_node_value_0.tid = 49) AND (node_data_field_qwe.field_zxcvb$
) count_alias
FROM node node
INNER JOIN term_node term_node_value_0 ON node.vid = term_node_value_0.vid AND term_node_value_0.tid = 49
LEFT JOIN content_field_qwe node_data_field_qwe ON node.vid = node_data_field_qwe.vid
LEFT JOIN content_field_experience node_data_field_experience ON node.vid = node_data_field_experience.vid
INNER JOIN content_field_rty node_data_field_rty ON node.vid = node_data_field_rty.vid
INNER JOIN content_field_mnb node_data_field_mnb ON node.vid = node_data_field_mnb.vid
INNER JOIN content_field_hgfn node_data_field_hgfn ON node.vid = node_data_field_hgfn.vid
INNER JOIN content_field_smoking node_data_field_smoking ON node.vid = node_data_field_smoking.vid
INNER JOIN content_field_worktime node_data_field_worktime ON node.vid = node_data_field_worktime.vid
INNER JOIN content_field_livein node_data_field_livein ON node.vid = node_data_field_livein.vid
INNER JOIN content_field_language node_data_field_language ON node.vid = node_data_field_language.vid
INNER JOIN content_field_uio node_data_field_uio_value_0 ON node.vid = node_data_field_uio_value_0.vid AND node_data_f$
INNER JOIN content_field_uio node_data_field_uio_value_1 ON node.vid = node_data_field_uio_value_1.vid AND node_data_f$
INNER JOIN content_field_uio node_data_field_uio_value_2 ON node.vid = node_data_field_uio_value_2.vid AND node_data_f$
INNER JOIN content_field_uio node_data_field_uio_value_3 ON node.vid = node_data_field_uio_value_3.vid AND node_data_f$
INNER JOIN content_field_uio node_data_field_uio_value_4 ON node.vid = node_data_field_uio_value_4.vid AND node_data_f$
INNER JOIN content_field_uio node_data_field_uio_value_5 ON node.vid = node_data_field_uio_value_5.vid AND node_data_f$
INNER JOIN content_field_uio node_data_field_uio_value_6 ON node.vid = node_data_field_uio_value_6.vid AND node_data_f$
INNER JOIN content_field_uio node_data_field_uio_value_7 ON node.vid = node_data_field_uio_value_7.vid AND node_data_f$
INNER JOIN content_field_uio node_data_field_uio_value_8 ON node.vid = node_data_field_uio_value_8.vid AND node_data_f$
INNER JOIN content_field_uio node_data_field_uio_value_9 ON node.vid = node_data_field_uio_value_9.vid AND node_data_f$
INNER JOIN content_field_uio node_data_field_uio_value_10 ON node.vid = node_data_field_uio_value_10.vid AND node_data$
INNER JOIN content_field_uio node_data_field_uio_value_11 ON node.vid = node_data_field_uio_value_11.vid AND node_data$
INNER JOIN content_field_uio node_data_field_uio_value_12 ON node.vid = node_data_field_uio_value_12.vid AND node_data$
INNER JOIN content_field_uio node_data_field_uio_value_13 ON node.vid = node_data_field_uio_value_13.vid AND node_data$
WHERE (node.type IN ('xxxxx')) AND (node.status <> 0) AND (term_node_value_0.tid = 49) AND (node_data_field_qwe.field_zxcvb$
) count_alias
собственно у клиента выловлен вот такой вот запрос, который лочил таблицу node нафиг
Комментарии
какие меры приняты?
убить вьюззззы
А можно все таки коду поставить атрибут языка SQL, а не php ?
смотри чо будет
Хм. Странно, обычно эта гадость в одну строчку вытягивалась
Либо пофиксили, либо копировал откуда-то не оттуда (м.б. что-нибудь с Unix-like переводом строки?)
Да вроде и это копировалось не с выньсемь
Кстати да, что сделали с клиентом?
Непонятно зачем сто-пятьдесят раз джоинить одну и ту же таблицу? Для надежности?
А смысл анализировать во views, какие таблицы подключены, а какие нет, если это ещё лучше сделает анализатор MySQL?
А смысл вообще делать выборку во views?
Ты хочешь в очередной раз затеять холивар "views must have/die"?
В модуле Views нет оптимизатора запросов. Статус этой проблемы всегда был "patches are welcome". Надеюсь, намек понят )))
ух ты
И с вами снова передача "Очевидное, невероятное"
SELECT DISTINCT(node.nid) AS nid, hotels_suggest_price_search.price AS price FROM node node
LEFT JOIN hotels_buildings hotels_buildings ON node.nid = hotels_buildings.nid
LEFT JOIN hotels_rooms hotels_rooms ON hotels_building
s.id = hotels_rooms.build_id LEFT JOIN hotels_rooms_placing hotels_rooms_placing ON hotels_rooms.id = hotels_rooms_placing.room_id
LEFT JOIN hotels_suggest_price_search hote
ls_suggest_price_search ON node.nid = hotels_suggest_price_search.nid
INNER JOIN hotels_suggest hotels_suggest ON hotels_suggest_price_search.sug_id = hotels_suggest.id
INNER JOIN content_field_type_object node_data_field_type_object ON node.vid = node_data_field_type_object.vid
LEFT JOIN hotels_suggest_price hotels_suggest_price_value_0 ON node.nid = hotels_suggest_price_value_0.nid AND hotels_suggest_price_value_0.food_id = 214
LEFT JOIN hotels_suggest_price hotels_suggest_price_value_1 ON node.nid = hotels_suggest_price_value_1.nid AND hotels_suggest_price_value_1.food_id = 215 LEFT JOIN hotels_suggest_price hotels_suggest_price_value_2 ON node.nid = hotels_suggest_price_value_2.nid A
ND hotels_suggest_price_value_2.food_id = 218 LEFT JOIN hotels_suggest_price hotels_suggest_price_value_3 ON node.nid = hotels_suggest_price_value_3.nid AND hotels_suggest_price_value_3.food_id = 219
LEFT JOIN hotels_suggest_price hotels_suggest_price_value_4 ON node.nid = hotels_suggest_price_value_4.nid ANDh otels_suggest_price_value_4.food_id = 216
LEFT JOIN hotels_suggest_price hotels_suggest_price_value_5 ON node.nid = hotels_suggest_price_value_5.nid AND hotels_suggest_price_value_5.food_id = 217
LEFT JOIN hotels_suggest_price hotels_suggest_price_value_6 ON node.nid = hotels_suggest_price_value_6.nid AND hotels_suggest_price_value_6.food_id = 1057
LEFT JOIN hotels_suggest_price hotels_suggest_price_value_7 ON node.nid = hotels_suggest_price_value_7.nid AND hotels_suggest_price_value_7.food_id = 1290
LEFT JOIN hotels_suggest_price hotels_suggest_price_value_8 ON node.nid = hotels_suggest_price_value_8.nid AND hotels_suggest_price_value_8.food_id = 1291
LEFT JOIN hotels_suggest_price hotels_suggest_price_value_9 ON node.nid = hotels_suggest_price_value_9.nid AND hotels_suggest_price_value_9.food_id = 1292
LEFT JOIN hotels_suggest_price hotels_suggest_price_value_10 ON node.nid = hotels_suggest_price_value_10.nid AND hotels_suggest_price_value_10.food_id = 1285
LEFT JOIN hotels_suggest_price hotels_suggest_price_value_11 ON node.nid = hotels_suggest_price_value_11.nid AND
hotels_suggest_price_value_11.food_id = 1286
LEFT JOIN hotels_suggest_price hotels_suggest_price_value_12 ON node.nid = hotels_suggest_price_value_12.nid AND hotels_suggest_price_value_12.food_id = 1058
LEFT JOIN hotels_suggest_price hotels_suggest_price_value_13 ON node.nid = hotels_suggest_price_value_13.nid AND hotels_suggest_price_value_13.food_id = 1059
LEFT JOIN hotels_suggest_price hotels_suggest_price_value_14 ON node.nid = hotels_suggest_price_value_14.nid AND hotels_suggest_price_value_14.food_id = 221
LEFT JOIN hotels_suggest_price hotels_suggest_price_value_15 ON node.nid = hotels_suggest_price_value_15.nid AND hotels_suggest_price_value_15.food_id = 223
LEFT JOIN hotels_suggest_price hotels_suggest_price_value_16 ON node.nid = hotels_suggest_price_value_16.nid AND hotels_suggest_price_value_16.food_id = 220
LEFT JOIN hotels_suggest_price hotels_suggest_price_value_17 ON node.nid = hotels_suggest_price_value_17.nid AND hotels_suggest_price_value_17.food_id = 222
WHERE (
hotels_suggest_price_search.date_begin <= 1295950901 )
AND ( hotels_suggest_price_search.date_end >= 1295950901 )
AND ( hotels_suggest.additional = 0 )
AND (node_data_field_type_object.field_type_object_value = '209')
AND (hotels_rooms.star IN ('1', '2', '3'))
AND (hotels_rooms.type = 241)
AND (hotels_suggest_price_value_0.food_id = 214
OR hotels_suggest_price_value_1.food_id = 215
OR hotels_suggest_price_value_2.food_id = 218
OR hotels_suggest_price_value_3.food_id = 219
OR hotels_suggest_price_value_4.food_id = 216
OR hotels_suggest_price_value_5.food_id = 217
OR hotels_suggest_price_value_6.food_id = 1057
OR hotels_suggest_price_value_7.food_id = 1290
OR hotels_suggest_price_value_8.food_id = 1291
OR hotels_suggest_price_value_9.food_id = 1292
OR hotels_suggest_price_value_10.food_id = 1285
OR hotels_suggest_price_value_11.food_id = 1286
OR hotels_suggest_price_value_12.food_id = 1058
OR hotels_suggest_price_value_13.food_id = 1059
OR hotels_suggest_price_value_14.food_id = 221
OR hotels_suggest_price_value_15.food_id = 223
OR hotels_suggest_price_value_16.food_id = 220
OR hotels_suggest_price_value_17.food_id = 222)
AND (node.type IN ('hotel'))
GROUP BY nid ORDER BY price ASC) count_alias
Коллекционируешь? )))
Запрос конечно ужастный, но вот интересно, MySQL его хоть чуть оптимизирует? Если переписать его на нормальный разница будет "просто ужас" или "ужас, ужас, ужас"?
Судя по тому, что на тот момент когда я его выловил, запрос выполнялся более 12000 секунд, а статус запроса был "Copying to tmp table", то очень врядли
"Место на диске закончилось. Вставьте новый диск".
достался по наследству вьюс, котрый формирует контент для ниво-слайдера,
контент представляет собой пикчи-заголовки-описания событий, которые имеют периодичность 3 раза в неделю, до конца года, т.е. 52х3 = 156 дат начала и столько же дат окончания события
время генерации страницы со слайдером составляло:
- 30 сек. на dev-сервере, не настроен, тупо друбунта
- 9 сек. на продакшене, настроен х. пойми кем и как
- 10 сек. на it-patrol (тариф за 100р., просто залил туда сайт для сравнения)
включил агрегацию, время генерации страницы уменьшилось:
- 4 сек. на dev
- 0.7 сек. на продакшене
- it-patrol не стал мучать своими антинаучными опытами
включил кэширование вьюса, результаты: 1.2 сек. / 0.7 сек. (на продакшене не изменилось)
мораль:
распрямляйте, сука, свои руки