MYSQL оптимизации со смешанным и / или - PullRequest
0 голосов
/ 15 февраля 2012

У нас есть несколько больших таблиц, и мы пытаемся их оптимизировать. (Примечание: в этом примере id, user_id и delete имеют индексы).

Молниеносно:

select *
from sites
where (sites.id = 242 and sites.user_id = 425)

select *
from sites
where (sites.id = 242 or sites.user_id = 425)

Но как только мы добавляем смешанную условную проверку, это просто баки

select *
from sites
where (sites.id = 242 or sites.user_id = 425) and sites.deleted = 1

Мы обнаружили, что этот запрос (хак) работает, но в настоящее время мы используем SQLAlchemy для построения запросов и хотим избежать любых подзапросов

select *
from sites
where (sites.id = 242 or sites.user_id = 425) and site.id in (
    select id from sites where sites.deleted = 1
)

Меня смущает, что mysql задыхается от смешанного случая. Но есть ли способ оптимизировать это?

1 Ответ

1 голос
/ 15 февраля 2012

Вы можете попытаться добавить составной индекс для user_id, is_deleted (порядок имеет значение, и я не уверен, какой путь будет лучше для этого конкретного сценария).Если вы ищете в первую очередь для одного или ограниченного числа user_ids, этот порядок будет правильным.

Это может вам помочь.

Является ли ID вашим уникальным первичным ключом?Если да, то нужно ли искать его, если он удален?

Возможно, вы сможете использовать UNION, если он доступен, поскольку поиск по первичному ключу будет очень быстрым.

Брайан

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...