Попытки решить эту проблему: Sql: choose all baskets containing a set of particular itemsPostgreSQL: пересекается индекс сканирует на тот же индекс
Других слов есть таблица:
tbl_basket_item
--
basketId itemId
1 2
1 3
1 4
2 3
2 4
3 2
3 4
ItemId индексируются.
Если я выполнить сканирование на Itemid = 2, я получаю:
SELECT basketId FROM tbl_basket_item WHERE itemId = 2
1
3
Если я выполнить сканирование на Itemid = 4, я получаю:
SELECT basketId FROM tbl_basket_item WHERE itemId = 4
1
2
3
Могу ли я теперь пересекаются эти два сканирования, чтобы получить:
SELECT basketId FROM tbl_basket WHERE
basketId IN (SELECT basketId FROM tbl_basket_item WHERE itemId = 2) AND
basketId IN (SELECT basketId FROM tbl_basket_item WHERE itemId = 4)
1
3
с использованием некоторых продвинутых технологий индексирования PostgeSQL, таких как растровые индексы?
Что именно ваш вопрос? Вы ищете оператор 'interesct'? Я также не вижу, как конкретный индекс _type_ имеет отношение к вашему вопросу. У вас проблемы с производительностью с этим заявлением? Если да, то прочитайте это: https://wiki.postgresql.org/wiki/Slow_Query_Questions –
Двойной запрос NOT EXISTS() генерирует сканирование индекса для внутреннего запроса в таблице соединений (даже для этого очень маленького rowcount = 7) – joop
@joop Я попробую! –