Простой вопрос по SQL

YUAL

Предположим у меня есть таблица X с тысячью записей
 
   `id` int(11) NOT NULL AUTO_INCREMENT,
`A` tinyint(1) NOT NULL,
`B` int(11) NOT NULL,
`C` int(11) NOT NULL,

X.B и X.C - внешние ключи на другие небольшие таблицы
 Индексы по всем трём полям
Есть таблица Y с 100 миллионами записей.
 
   `id` bigint(20) NOT NULL AUTO_INCREMENT,
`A` varchar(100) NOT NULL,
`B` int(11) NOT NULL,
`created` datetime NOT NULL,

где Y.B внешний ключ, ссылающий на A.id
индексы по всем полям кроме A
Допустим мне надо выбрать 10 последних по датей записей из таблицы Y для одной какой-то записи из таблицы X.
Я могу сделать
 
 select id from X where A = 1, B = 234234 and C =  23423
а потом
select from Y where B = айди из предыдущего запроса order by created desc limit 10

А можно через джоин. Что будет быстрее? База - мускуль 5.5 иннодб.
Очень не хочется тестами заморачиваться.

hwh2010

Я с MySQL давно не имел дело, но предполагая минимальную разумность его разработчиков напишу вот что:
(A, B, C) уникальны в X? Соответствующий UK есть?
Если да, то я думаю что MySQL сделает джойн так же быстро, как и 2 запроса (даже чуть быстрее за счёт того что запрос один).
Впрочем, я думаю что ничто не мешает написать where B = (select id from X ...). Тогда будет точно быстро
Алсо, набор индексов не оптимален для этих запросов, помогут индексы на несколько колонок.
А грамотей Федечка снова облажался и отправляется читать Розенталя, грамота.ру и другие интересные ресурсы

YUAL

(A, B, C) уникальны в X? Соответствующий UK есть?
уникальны (B, C) А - это флажок по сути. если он снят, то дальнейшее действие бесммыслено. но в 99% случаев он будет стоять. кстати скорее всего тогда его стоит исключить из индекса.
UK есть у каждого из столбцов на который ссылаются B и С. В таблице X на них общий юник не стоит. Стоит сделать?

6yrop

Очень не хочется тестами заморачиваться.
уже бы давно план посмотрел, чем на форуме флудить

YUAL

Емнип план зависит от состояния таблицы. Тоесть мне сперва надо напихать туда реальный объем даннх вместо тестовых 100 записей.

hwh2010

напихать миллион записей тож недолго
думаю, UK не помешает
Оставить комментарий
Имя или ник:
Комментарий: