具有混合和/或的MYSQL优化

时间:2012-02-15 01:06:28

标签: mysql sqlalchemy

我们有一些大型表,正在尝试优化。 (注意:在这个例子中,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

我们发现此查询(hack)有效,但我们目前正在使用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 个答案:

答案 0 :(得分:1)

您可以尝试添加复合索引 user_id,is_deleted(顺序很重要,我不确定哪种方式对这种特定情况会更好)。如果您主要搜索单个或有限数量的user_id,则此顺序将是正确的方式。

这可能会帮助你。

ID是您唯一的主键吗?如果是这样,如果它被删除,你需要搜索它吗?

如果可用,您可以使用UNION,因为主键搜索速度非常快。

布赖恩