Новости
Документация
Download
Webboard
Поиск
FAQ/ЧаВо
Обратная связь




MySQL.RU - Webboard



Вернуться
LEFT JOIN и целесообразность индексов (Sc@M) 25/12/2009 - 07:31:12



From: Sc@M - 25/12/2009 - 07:31:12
Subject:LEFT JOIN и целесообразность индексов
-----------------
Доброго времени!
Подскажите пожалуста такой момент.
Имею 2 таблицы.
Первая табличка реляционная и хранит номер категории и номер товара.
Вторая табличка хранит товары.
Суть в том, что один товар может быть сразу в нескольких категориях.
Всё просто! =)
Поэтому чтобы достать товары из определённой категории по ID категории, делаю запрос вида

SELECT
`t2`.*
, `t1`.`category_id`
FROM
`database`.`category` AS `t1` FORCE INDEX(`category_id`)
STRAIGHT_JOIN
`database`.`goods` AS `t2`
ON
`t1`.`good_id` = `t2`.`id`
WHERE
`t1`.`category_id` = '10'
AND
(
`t2`.`status` = '0'
OR
`t2`.`status` = '1'
)
ORDER BY
`t2`.`created` DESC

EXPLAIN этого запроса показывает мне, что при объединение будет задействован только индекс `category_id` в таблице `category` и соответственно PRIMARY KEY в таблице `goods`. Причём таблица `category` будет нуждаться в Using temporary и Using filesort - хорошо это или плохо? Читал руководство, но так и не смог понять смысл оптимальности (то, что это обозначает я знаю =)).
Табличка `goods` имеет составной индекс на полях `status` и `created`.
Возможно я сделал это неоптимально.
Просто мне будет необходимо исключить записи со статусом = -1, а также отсортировать всё это хозяйство по дате добавления в обратном порядке (от новых к старым).
Как я понимаю кроме указанных выше ключей, MySQL безразличны индекс/индексы на `status` и `created`???
Т.к. он умеет юзать только 1 ключ при объединение! Что он и делает. "Джоинит" по `good_id`.
А если записей будет очень много? Модно "миллион" упоминать! =) Да! Их будет миллион, то что?!
Кто знает как правильно составить такой запрос и заюзать индексы?
Заранее спасибо!


[Это сообщение - спам!]

Последние сообщения из форума

Уважаемые посетители форума MySQL.RU!
Убедительная просьба, прежде чем задавать свой вопрос в этом форуме, обратите внимание на разделы:
- ответы на наиболее часто задаваемые вопросы - FAQ
- раздел документация
- раздел поиск по сообщениям форума и документации
Также, старайтесь наиболее подробно указывать свою ситуацию (версию операционной системы, версию MySQL, версию программного обеспечения, по которому возникает вопрос, текст возникающих ошибок, и др.)
Помните, чем конкретнее Вы опишете ситуацию, тем больше шансов получить реальную помощь.
 Имя:
 E-mail:
 Тема:
 Текст:
Код подтверждения отправки: Code
36585



РЕКЛАМА НА САЙТЕ
  Создание сайтов | |