Views-кретинизмы

Главные вкладки

Аватар пользователя Виктор Степаньков ака RxB Виктор Степаньк... 15 ноября 2010 в 23:20
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

собственно у клиента выловлен вот такой вот запрос, который лочил таблицу node нафиг

Комментарии

Аватар пользователя G.A. Vinogradov G.A. Vinogradov 16 ноября 2010 в 8:57

RxB wrote:
Хм. Странно, обычно эта гадость в одну строчку вытягивалась

Либо пофиксили, либо копировал откуда-то не оттуда (м.б. что-нибудь с Unix-like переводом строки?)

Аватар пользователя Dan Dan 16 ноября 2010 в 14:07

А смысл анализировать во views, какие таблицы подключены, а какие нет, если это ещё лучше сделает анализатор MySQL?

Аватар пользователя seaji seaji 16 ноября 2010 в 14:19

"Dan" wrote:
А смысл анализировать во views, какие таблицы подключены,

А смысл вообще делать выборку во views?
"Dan" wrote:
если это ещё лучше сделает MySQL?

Аватар пользователя Dan Dan 16 ноября 2010 в 15:38

"seaji" wrote:
А смысл вообще делать выборку во views?

Ты хочешь в очередной раз затеять холивар "views must have/die"?

Аватар пользователя Crea Crea 16 ноября 2010 в 15:42

В модуле Views нет оптимизатора запросов. Статус этой проблемы всегда был "patches are welcome". Надеюсь, намек понят )))

Аватар пользователя Виктор Степаньков ака RxB Виктор Степаньк... 28 января 2011 в 15:50

И с вами снова передача "Очевидное, невероятное"

SELECT COUNT(*) FROM (
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
Аватар пользователя Dan Dan 28 января 2011 в 21:12

Коллекционируешь? )))
Запрос конечно ужастный, но вот интересно, MySQL его хоть чуть оптимизирует? Если переписать его на нормальный разница будет "просто ужас" или "ужас, ужас, ужас"? Smile

Аватар пользователя Виктор Степаньков ака RxB Виктор Степаньк... 28 января 2011 в 21:29

"Dan" wrote:
MySQL его хоть чуть оптимизирует

Судя по тому, что на тот момент когда я его выловил, запрос выполнялся более 12000 секунд, а статус запроса был "Copying to tmp table", то очень врядли

Аватар пользователя Andruxa Andruxa 31 января 2013 в 13:12

достался по наследству вьюс, котрый формирует контент для ниво-слайдера,
контент представляет собой пикчи-заголовки-описания событий, которые имеют периодичность 3 раза в неделю, до конца года, т.е. 52х3 = 156 дат начала и столько же дат окончания события

время генерации страницы со слайдером составляло:
- 30 сек. на dev-сервере, не настроен, тупо друбунта
- 9 сек. на продакшене, настроен х. пойми кем и как
- 10 сек. на it-patrol (тариф за 100р., просто залил туда сайт для сравнения)

включил агрегацию, время генерации страницы уменьшилось:
- 4 сек. на dev
- 0.7 сек. на продакшене
- it-patrol не стал мучать своими антинаучными опытами

включил кэширование вьюса, результаты: 1.2 сек. / 0.7 сек. (на продакшене не изменилось)

мораль:

распрямляйте, сука, свои руки