Сложная выборка из базы

May

Новичок
Всем доброго дня. Имеется следующая структура mysql

Таблица table1

company service
12 1
12 2
34 1
34 5
55 1

Собственно, нужно сделать выборку компаний (company) при условии наличия услуг (service) 1 && 2

Таких условий может быть несколько 1 && 2 && 5 ...
Выводиться должны только те компании, которые содержат данные параметры

На текущий момент найдено решение через INNER JOIN, однако время работы скрипта увеличивается до 10 секунд уже при 5-м джоине.

Хотелось бы найти решение подобной выборки.
 

phprus

Moderator
Команда форума
Не далее как восемь тем назад обсуждался точно такой-же вопрос, но про индексирование и поиск всех слов. А еще ранее такая-же задача тоже обсуждалась (но не в контексте скорости, а в контексте варианта решения).
 

May

Новичок
phprus
Не могли бы подсказать как найти данные темы? Уже все перерыл перед тем как задавать вопрос. Буду очень благодарен.
 

phprus

Moderator
Команда форума
8 тем назад в этом разделе форума была только одна тема содержащая в своем названии слово "Индексирование", которое я не просто так упомянул постом ранее.
 

May

Новичок
Ну что же, к сожалению, все другие темы не помогли. Ничего толкового найти не удалось.

Методом проб и ошибок удалось найти решение и добиться скорости менее 1 секунды с использованием проверки через EXISTS.
Надеюсь, поможет тем, кто столкнется с проблемой.

Тему можно закрывать.
 

iceman

говнокодер
PHP:
select * from table1 where service in (1,2,5)
/* так как значений совпадений мало и фиксированно, лучше юзать IN */
джоинить ничо не нужно, если тебе не нужна информация с другой таблицы! лишняя операция.
и развесь индексы!
 

May

Новичок
iceman
У меня кол-во совпадений может быть несколько десятков.
Насколько данный способ будет эффективен - проверю чуть попозже.
 

iceman

говнокодер
твои "совпадения" хранятся в таблице? - если да то ТОЛЬКО EXISTS
если нет (печатаешь их динамически, например в пхп код sql генерируешь), то меняй логику своей программы, так быть не должно

ps и не сложный это запрос...
 

May

Новичок
iceman
В таблице хранятся )

После того, как его составил - он совсем не сложный :)
 
Сверху