Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / MySQL [игнор отключен] [закрыт для гостей] / На подхватываются индексы при LEFT JOIN / 4 сообщений из 4, страница 1 из 1
13.10.2014, 22:07:25
    #38775675
m1andry
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
На подхватываются индексы при LEFT JOIN
Ломаю голову уже целый день.
Столкнулся с 2 проблемами.

1. Индексы не подвязываются, если если есть 2 условия, к примеру:
Код: sql
1.
LEFT JOIN table ON table.id=main.id OR table.id=secondary.id



В интернете вроде говорят, что индекс можно связать лишь один-к-одному, и нельзя одни-ко-многим, так ли это?
Какие костыли придумать, что бы обойти?


2. Есть 3 таблицы (основная, с просмотрами основной, с заметками к основной). Делая выборку
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
SELECT a.id

FROM ofs_resolution a 

LEFT JOIN ofs_resolution_bookmark bm 	ON bm.id_resolution=a.id AND bm.id_user=1
LEFT JOIN sys_journal_visit jv 		ON jv.id_user=1 AND jv.id_object=a.id_letter AND jv.page='letter'

GROUP BY a.id
LIMIT 0, 10000


Получаю

При этом это всё индексы: bm.id_resolution и bm.id_user, jv.id_user и jv.id_object и jv.page, a.id_letter
...
Рейтинг: 0 / 0
13.10.2014, 23:04:50
    #38775710
javajdbc
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
На подхватываются индексы при LEFT JOIN
m1andry,

я. перепишите OR как все отдельных запросa
связаных UNION ALL. тогда в каждом запросе подвяжется
(если подойдет) свой индекс
...
Рейтинг: 0 / 0
13.10.2014, 23:07:09
    #38775712
javajdbc
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
На подхватываются индексы при LEFT JOIN
2. в конкретном случае вы можете переписать как

LEFT JOIN table ON table.id IN (main.id,secondary.id)

в текуших версиях (кажется >= 5.5) это будет быстро.
В старых версиях лучше UNION ALL
...
Рейтинг: 0 / 0
13.10.2014, 23:11:47
    #38775715
javajdbc
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
На подхватываются индексы при LEFT JOIN
m1andry,

по поводу второго вопроса про 3 таблицы:

1. когда вы задаете вопрос, то задавайте вопрос.
Что вас собствено не нравится в запросе и плане?

2. БМ таблица у вас имеет 8 записей,
так ни разу не интересно тестировать.
Киньте туда реальные данные.
Если это есть реальные данные, то у вас все хорошо и так.
...
Рейтинг: 0 / 0
Форумы / MySQL [игнор отключен] [закрыт для гостей] / На подхватываются индексы при LEFT JOIN / 4 сообщений из 4, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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