powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / MySQL [игнор отключен] [закрыт для гостей] / оптимизация MySQL
3 сообщений из 28, страница 2 из 2
оптимизация MySQL
    #39143254
vkle
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ladoga12422. При переключении на вкладку событий по конкретному объекту в лог медленных запросов попался вот такой (время выполнения несколько секунд):
SELECT DATE_FORMAT(ev.receivedtime, '%Y.%m.%d') receiveddate, DATE_FORMAT(ev.receivedtime, '%Y.%m.%d %H:%i:%s') receivedtime, ev.receivedtime receivedtime2, CONCAT(ev.clasificator, " ", ev.eventcode, " ", ev.zonenumber) eventcode, ev.eventname, ev.reactedtime, HEX(CAST(ev.receivedlevel AS UNSIGNED)) receivedlevel, HEX(CAST(ev.retranslatorlevel AS UNSIGNED))retranslatorlevel, IF(ev.name IS NULL, HEX(CAST(ev.retranslator AS UNSIGNED)), ev.name) retranslatorname FROM (SELECT * FROM events LEFT JOIN retranslators ON events.retranslator = retranslators.nr WHERE events.objectnr='4103' and events.linenr='1' and events.receivernr='1' and (events.repeated =2 or events.repeated = 'No') ORDER BY events.receivedtime DESC LIMIT 50) ev ORDER BY receivedtime2 DESC;
0. Ужасно оформляете код. Так вот гораздо лучше читать и понимать
Код: 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.
SELECT 
    DATE_FORMAT(ev.receivedtime, '%Y.%m.%d') receiveddate, 
    DATE_FORMAT(ev.receivedtime, '%Y.%m.%d %H:%i:%s') receivedtime, 
    ev.receivedtime receivedtime2, 
    CONCAT(ev.clasificator, " ", ev.eventcode, " ", ev.zonenumber) eventcode, 
    ev.eventname, 
    ev.reactedtime, 
    HEX(CAST(ev.receivedlevel AS UNSIGNED)) receivedlevel, 
    HEX(CAST(ev.retranslatorlevel AS UNSIGNED))retranslatorlevel, 
    IF(ev.name IS NULL, HEX(CAST(ev.retranslator AS UNSIGNED)), ev.name) retranslatorname 
FROM 
    (
        SELECT 
            * 
        FROM 
            events 
            LEFT JOIN retranslators ON events.retranslator = retranslators.nr 
        WHERE 
            events.objectnr='4103' 
            and 
            events.linenr='1' 
            and 
            events.receivernr='1' 
            and 
            (
                events.repeated =2 
                or 
                events.repeated = 'No'
            ) 
        ORDER BY 
            events.receivedtime DESC 
        LIMIT 50
    ) ev 
ORDER BY 
    receivedtime2 DESC;


1. Не вполне понятно, для чего форматирование вынесено в обёртку. Да и вторая сортировка вроде лишняя.
2. Смешались в кучу строки, числа...автор(events.repeated =2 or events.repeated = 'No')
...
Рейтинг: 0 / 0
оптимизация MySQL
    #39143256
vkle
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Поля events.repeated и events.retranslator не проиндексированы, кажись. Это плохо.
Проверьте наличие индексов на остальных полях, по которым идёт связывание таблиц и отбор записей.
...
Рейтинг: 0 / 0
оптимизация MySQL
    #39143370
miksoft
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
vkleevents.retranslatorПо этому полю индекс не нужен, т.к. events всегда будет ведущей таблице в JOIN-е.
А вот нужен индекс по полю retranslators.nr

По таблице events надо смотреть статистику данных. Если поле objectnr имеет высокую селективность, то будет достаточно индекс по нему. Если нет, то надо смотреть на селективность в совокупности с другими полями, упомянутыми в секции WHERE.
...
Рейтинг: 0 / 0
3 сообщений из 28, страница 2 из 2
Форумы / MySQL [игнор отключен] [закрыт для гостей] / оптимизация MySQL
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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