Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / MySQL [игнор отключен] [закрыт для гостей] / можно ли это упростить-оптимизировать? / 7 сообщений из 7, страница 1 из 1
11.07.2014, 14:04:56
    #38694346
buyboy
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
можно ли это упростить-оптимизировать?
всем привет!
есть громадный запрос
и вопрос по нему: можно ли его как-то упростить-соптимизировать?
Код: 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.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
(SELECT
    wp_posts.ID AS 'id',
    wp_posts.post_title AS 'item',
    wp_posts.post_excerpt AS 'title',
    wp_terms.slug AS 'link',
    wp_posts.menu_order AS 'order',
    wp_terms.name AS 'title2',
    'category' AS 'type'
FROM wp_posts
LEFT JOIN  wp_term_relationships ON wp_posts.ID = wp_term_relationships.object_id
LEFT JOIN wp_postmeta ON wp_posts.ID = wp_postmeta.post_id
LEFT JOIN wp_postmeta AS t ON id = t.post_id
INNER JOIN wp_terms ON t.meta_value = wp_terms.term_id 
WHERE post_type = 'nav_menu_item' 
    AND wp_term_relationships.term_taxonomy_id = 15
    AND post_status = 'publish'
    AND wp_postmeta.meta_value = 'category'
    AND t.meta_key =  '_menu_item_object_id'
ORDER BY wp_posts.menu_order)

UNION

(SELECT 
    f.ID AS 'id',
    f.post_title AS 'item',
    f.post_excerpt AS 'title',
    s.post_name AS 'link',
    f.menu_order AS 'order',
    f.post_excerpt AS 'title2',
    'page' AS 'type'
FROM `wp_posts` AS f
LEFT JOIN  wp_term_relationships ON f.ID = wp_term_relationships.object_id
LEFT JOIN  `wp_posts` AS s ON s.ID = (
            SELECT `meta_value` FROM `wp_postmeta` 
            WHERE `post_id` = f.ID AND `meta_key` = '_menu_item_object_id'
            )
WHERE f.post_type = 'nav_menu_item' 
    AND wp_term_relationships.term_taxonomy_id = 15
    AND f.post_status = 'publish'
    AND s.post_type = 'page'
ORDER BY f.menu_order)

UNION

(SELECT
    wp_posts.ID AS 'id',
    wp_posts.post_title AS 'item',
    wp_posts.post_excerpt AS 'title',
    t.meta_value AS 'link',
    wp_posts.menu_order AS 'order',
    wp_terms.name AS 'title2',
    'link' AS 'type'
FROM wp_posts
LEFT JOIN  wp_term_relationships ON wp_posts.ID = wp_term_relationships.object_id
LEFT JOIN wp_postmeta AS t ON id = t.post_id
LEFT JOIN wp_terms ON t.meta_value = wp_terms.term_id 
WHERE post_type = 'nav_menu_item' 
    AND wp_term_relationships.term_taxonomy_id = 15
    AND post_status = 'publish'
    AND t.meta_key =  '_menu_item_url'
    AND t.meta_value != ''
ORDER BY wp_posts.menu_order)

ORDER BY `order`;
...
Рейтинг: 0 / 0
11.07.2014, 14:19:14
    #38694373
miksoft
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
можно ли это упростить-оптимизировать?
Можно смело убирать ORDER BY из внутренних запросов, оно все равно смысла не имеет. Хотя, возможно, MySQL уже сам догадался это сделать.
...
Рейтинг: 0 / 0
11.07.2014, 14:25:52
    #38694386
buyboy
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
можно ли это упростить-оптимизировать?
miksoftМожно смело убирать ORDER BY из внутренних запросов, оно все равно смысла не имеет. Хотя, возможно, MySQL уже сам догадался это сделать.
ага! а я-то и не обратил внимания...
спасибо

такой вот "объединенный" запрос будет по времени меньше выполняться чем чем сумма времени три разных?
...
Рейтинг: 0 / 0
11.07.2014, 14:31:13
    #38694392
miksoft
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
можно ли это упростить-оптимизировать?
buyboyтакой вот "объединенный" запрос будет по времени меньше выполняться чем чем сумма времени три разных?Наоборот, больше. Еще потребуются накладные расходы на хранение их промежуточных результатов и выполнение над ними DISTINCT.
...
Рейтинг: 0 / 0
11.07.2014, 14:33:07
    #38694393
miksoft
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
можно ли это упростить-оптимизировать?
Еще у ряда полей не указана таблица, из которой они берутся. Подозреваю, что часть LEFT JOIN-ов по факту являются просто JOIN-ами. Тогда лучше слово LEFT убрать, чтобы у MySQL была возможность самому выбрать порядок соединения таблиц.
...
Рейтинг: 0 / 0
11.07.2014, 14:43:24
    #38694415
buyboy
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
можно ли это упростить-оптимизировать?
miksoftлучше слово LEFT убрать, чтобы у MySQL была возможность самому выбрать порядок соединения таблиц.
неееее! без этого ничего не получилось!
да и как мускул решить вместо меня правильно?!
...
Рейтинг: 0 / 0
11.07.2014, 14:47:06
    #38694421
miksoft
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
можно ли это упростить-оптимизировать?
buyboymiksoftлучше слово LEFT убрать, чтобы у MySQL была возможность самому выбрать порядок соединения таблиц.
неееее! без этого ничего не получилось!
да и как мускул решить вместо меня правильно?!Ну так убирать, вероятно, нужно не все LEFT-ы подряд, а после внимательного рассмотрения на предмет их логики.
А у MySQL есть некоторая статистика по распределению данных в таблицах. Которую можно принудительно пересобрать командой ANALYZE TABLE.
...
Рейтинг: 0 / 0
Форумы / MySQL [игнор отключен] [закрыт для гостей] / можно ли это упростить-оптимизировать? / 7 сообщений из 7, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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