You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

SQL中带WHERE与AND子句的查询是否会使用指定owner_id索引?

索引使用问题解答

数据表结构

CREATE TABLE profile (
    id BIGSERIAL PRIMARY KEY,
    nickname VARCHAR,
    registered_at TIMESTAMP
);
CREATE TABLE post (
    id BIGSERIAL PRIMARY KEY,
    owner_id BIGINT REFERENCES profile(id),
    body TEXT,
    inserted_at TIMESTAMP,
    likes_count INT
);

已创建的索引

CREATE INDEX ON post (owner_id);

查询语句

SELECT * FROM post WHERE likes_count = ? AND owner_id = ?

问题解答

这个查询有可能会用到owner_id索引,但不是必然的,取决于实际数据分布:

  • 当匹配owner_id = ?的记录数量较少时,数据库优化器会优先使用owner_id索引,先通过索引定位到该用户的所有帖子,再在这些结果里过滤出likes_count = ?的条目。
  • 如果某个owner_id对应的帖子数量极多(比如上万条),优化器会判断全表扫描的成本更低,就不会使用这个索引。

如果想要让这个查询的索引使用更稳定、性能更优,建议创建复合索引:

CREATE INDEX ON post (owner_id, likes_count);

这个复合索引可以同时匹配owner_id和likes_count两个条件,直接通过索引获取符合要求的记录,无需额外过滤。

内容的提问来源于stack exchange,提问作者Николай Беляков

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.20 08:02:42