Size: a a a

2020 November 26

IZ

Ivan Zaitsev in Random Ruby Chat
Я просто езщё понадеялся может есть распространённая пробелма с запросами такого плана, вдруг кто подскажет на опыте
источник

A

Anton in Random Ruby Chat
а  x, y, z и m в твоём примере это условия над одной и той же таблицей?
источник

IZ

Ivan Zaitsev in Random Ruby Chat
типо feed_id in (SELECT ...) and feed_type = 'EXAMPLE' OR feed_id in (SELECT ...) and feed_type = 'EXAMPLE2'
источник

A

Anton in Random Ruby Chat
а, вон оно что
источник

A

Anton in Random Ruby Chat
(SELECT ...) на feed_id в разных условиях разный, полагаю?
источник

A

Anton in Random Ruby Chat
индексы на feed_type и/или feed_id есть?
источник

IZ

Ivan Zaitsev in Random Ruby Chat
Anton
индексы на feed_type и/или feed_id есть?
да
источник

A

Anton in Random Ruby Chat
можешь индексы показать?
источник

IZ

Ivan Zaitsev in Random Ruby Chat
Anton
(SELECT ...) на feed_id в разных условиях разный, полагаю?
ну да, но по конструкции идентичный и с теми же таблицами работает
источник

A

Anton in Random Ruby Chat
есть подозрение что в случае когда оба условия используются оптимизатор решает что быстрее full table scan прогнать нежели чем index range scan (как в случае когда два условия по-отдельности выполняются) и поэтому становится медленнее
источник

A

Anton in Random Ruby Chat
но это наверняка чтобы знать нужен план запроса
источник

IZ

Ivan Zaitsev in Random Ruby Chat
"index_repository.nodes_on_feed_type_and_feed_id" btree (feed_type, feed_id)
источник

IZ

Ivan Zaitsev in Random Ruby Chat
Вот, он комплексный
источник

IZ

Ivan Zaitsev in Random Ruby Chat
Может как раз в этом причина
источник

A

Anton in Random Ruby Chat
почти уверен что в случае OR по обоим парам условий оно просто решает что full table scan проще провернуть
источник

A

Anton in Random Ruby Chat
Или: оно лезет в индексную структуру, тянет данные, но потом ему надо по OR смерджить два множества данных, выкинув дубликаты, и оно не помещается всё в память и мерджится с использованием дискового ввода-вывода который и сжирает большую часть времени
источник

IZ

Ivan Zaitsev in Random Ruby Chat
Как интересно тогда решать эту проблему если нужно одним запросом данные получить
источник

A

Anton in Random Ruby Chat
It, как говорится, depends. Таблица-то большая вообще? Каков порядок количества записей?
И каков порядок скажем количества записей возвращаемых в (SELECT ...) на feed_id?
источник

IZ

Ivan Zaitsev in Random Ruby Chat
Anton
It, как говорится, depends. Таблица-то большая вообще? Каков порядок количества записей?
И каков порядок скажем количества записей возвращаемых в (SELECT ...) на feed_id?
Таблица большая, много миллионов записей
источник

A

Anton in Random Ruby Chat
Вот еще вопрос: тот же запрос только с одной частью OR условия сколько выдает записей ? Ну и с другой частью?
источник