![]() |
Модераторы: skyboy |
![]() ![]() ![]() |
|
DonPager |
|
||||
![]() Колдырь ![]() ![]() Профиль Группа: Участник Сообщений: 327 Регистрация: 28.3.2003 Где: Воронеж Репутация: нет Всего: 2 |
Дрась,
есть запрос из 3х таблиц: EventLog(id,map_id,...) NodeTable(id,node_id, parent_id, label,...) Subnets (id, subnet_id , label,...)
Запрос корректно отрабатывает, но долго :( хочется оптимизировать. Чувствую, что нужно как-то избавиться от подзапроса
но не дам ума как. джоин тут не канает - т.к. в NodeTable и Subnets записи не уникальные и нужны последние из них база mysql Спасибо. -------------------- кодер + лодырь = колдырь |
||||
|
|||||
Zloxa |
|
|||
![]() Чо? ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 3473 Регистрация: 12.9.2008 Репутация: 53 Всего: 161 |
индексы: NodeTable (node_id,id), Subnets(subnet_id, id), EventLog(priority,id)
-------------------- Достоверно известно, что 89% людей доверяют статистике взятой с потолка ![]() |
|||
|
||||
DonPager |
|
|||
![]() Колдырь ![]() ![]() Профиль Группа: Участник Сообщений: 327 Регистрация: 28.3.2003 Где: Воронеж Репутация: нет Всего: 2 |
Текущую структуру БД менять нельзя :( есть доступ только на чтение
сейчас стоят одномерные индексы (id) для каждой из таблиц и менять их врятли кто-то будет UPD: если бы можно было переделали бы структуру с добавлением historySubnets, historyNodes - но нельзя :( Это сообщение отредактировал(а) DonPager - 29.6.2011, 11:03 -------------------- кодер + лодырь = колдырь |
|||
|
||||
Zloxa |
|
|||
![]() Чо? ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 3473 Регистрация: 12.9.2008 Репутация: 53 Всего: 161 |
они для этого запроса - бесполезны. тогда ничего больше не остается, поможет только хинт do_it_fast ![]() -------------------- Достоверно известно, что 89% людей доверяют статистике взятой с потолка ![]() |
|||
|
||||
triclosan |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 515 Регистрация: 18.8.2006 Репутация: 3 Всего: 12 |
||||
|
||||
DonPager |
|
||||||
![]() Колдырь ![]() ![]() Профиль Группа: Участник Сообщений: 327 Регистрация: 28.3.2003 Где: Воронеж Репутация: нет Всего: 2 |
таблица EventLog
![]() таблица NodeTable
![]() таблица Subnets
![]() -------------------- кодер + лодырь = колдырь |
||||||
|
|||||||
triclosan |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 515 Регистрация: 18.8.2006 Репутация: 3 Всего: 12 |
скиньте пожалуйста дамп таблиц (по десятку записей хотя бы)
|
|||
|
||||
Zloxa |
|
|||
![]() Чо? ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 3473 Регистрация: 12.9.2008 Репутация: 53 Всего: 161 |
Мне не понятно где ты видишь некорректность. Как еще "более корректно" выбрать лабел ноды со старшим номером версии? Я так понимаю версия определяется, судя по всему, автоинкрементом, потому по недоумию названа id, и, возможно даже определена как ПК, чтобы прочнее сбивать с толку )) Если сделать alter table NodeTable rename id to version#, отдача некорректностью не устранится ли? ![]() Это сообщение отредактировал(а) Zloxa - 29.6.2011, 14:47 -------------------- Достоверно известно, что 89% людей доверяют статистике взятой с потолка ![]() |
|||
|
||||
DonPager |
|
||||
![]() Колдырь ![]() ![]() Профиль Группа: Участник Сообщений: 327 Регистрация: 28.3.2003 Где: Воронеж Репутация: нет Всего: 2 |
А чем не устраивает данная иллюстрация? В абстрактном варианте вот вариант: А(id,data,iKey)= (1,'A','10'), (2,'B','11') B(id,key,data,sKey)= (1,'10','AAA','20'), (2,'10','BBB','20'), (3,'11','CCC','20'), (4,'12','DDD','21') C(id,key,data)= (1,'20','aaa'), (2,'20','bbb'), (3,'11','ccc'), (4,'12','ddd')
Выдаст (что и требуется): 1, 'A', '10', 'BBB','bbb' 2, 'B', '11', 'CCC', 'bbb' Остаётся только оптимизировать запрос - в этом и вопрос КАК? -------------------- кодер + лодырь = колдырь |
||||
|
|||||
triclosan |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 515 Регистрация: 18.8.2006 Репутация: 3 Всего: 12 |
Виноват, мне там group by привиделся, ну а если придираться, то limit в подзапросах это не очень хорошо - во-первых это кажись не поддерживается в старых версиях сервера, во-вторых делает запрос mysql-зависимым
не уверен, что стало лучше ![]() Это сообщение отредактировал(а) triclosan - 29.6.2011, 15:59 |
|||
|
||||
DonPager |
|
|||
![]() Колдырь ![]() ![]() Профиль Группа: Участник Сообщений: 327 Регистрация: 28.3.2003 Где: Воронеж Репутация: нет Всего: 2 |
не только НЕ лучше, но и хуже - при лимите в 50 записей мой вариант - 5 сек, твой - 9 за сим думаю решено поставлю - ибо чуда не произошло. -------------------- кодер + лодырь = колдырь |
|||
|
||||
triclosan |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 515 Регистрация: 18.8.2006 Репутация: 3 Всего: 12 |
DonPager, лимит тут ни при чем, он отрезает все, после 50 строки после полной выборки по всей таблице, можно сделать ухищрение типа EventLog.id > HINT_VALUE, где хинт порог выборки "чуть больше, чем 50"
|
|||
|
||||
DonPager |
|
|||
![]() Колдырь ![]() ![]() Профиль Группа: Участник Сообщений: 327 Регистрация: 28.3.2003 Где: Воронеж Репутация: нет Всего: 2 |
Имелось в виду, что выборку в подзапросе отфильтровл до 50 записей с уникальным id ... -но это не суть
чуда то всё равно не произошло =)... наверное забыл дунуть(с) Акопян -------------------- кодер + лодырь = колдырь |
|||
|
||||
triclosan |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 515 Регистрация: 18.8.2006 Репутация: 3 Всего: 12 |
Фильтрование лимитом не приведет к ускорению работы запроса, если вас это устроит можете выполнять предварительный запрос для анализа по какому значению id фильтровать как-то так:
или у вас не каждому A.id отвечают записи в таблицах B, C? |
|||
|
||||
Zloxa |
|
|||
![]() Чо? ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 3473 Регистрация: 12.9.2008 Репутация: 53 Всего: 161 |
DonPager, 6 секунд это не то время, которое имеет смысл оптимизировать, если запрос одноразовый и к чужой базе. Если же база своя и запрос не одноразовый, а продуктивный, то Вы, как минимум - разраб. Скажите пожалуйста, какая именно религия вас побуждает ожидать чудес вместо построения необходимых индексов?
-------------------- Достоверно известно, что 89% людей доверяют статистике взятой с потолка ![]() |
|||
|
||||
![]() ![]() ![]() |
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | Составление SQL-запросов | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |