|
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,
версию программного обеспечения, по которому возникает вопрос, текст возникающих ошибок, и др.)
Помните, чем конкретнее Вы опишете ситуацию, тем больше шансов получить реальную помощь.
36585
|
|