栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

用LIMIT 1索引ORDER BY

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

用LIMIT 1索引ORDER BY

假设我们正在处理一个 大表 ,则
部分索引
可能会有所帮助:

CREATE INDEX tbl_created_recently_idx ON tbl (created_at DESC)WHERe created_at > '2013-09-15 0:0'::timestamp;

正如您已经发现的那样:下降或上升在这里几乎无关紧要。Postgres可以以几乎相同的速度向后扫描(例外适用于多列索引)。

查询以使用此索引:

SELECt * FROM tblWHERe  created_at > '2013-09-15 0:0'::timestamp -- matches indexORDER  BY created_at DESCLIMIT  1;

这里的重点是使索引 更小 ,因此应该更容易缓存和维护。

  1. 您需要选择一个可以保证比最新时间戳更小的时间戳。
  2. 您应该不时重新创建索引以切断旧数据。
  3. 条件必须为
    IMMUTABLE

因此,一次性效果会随着时间的流逝而恶化。在 具体的问题 是硬编码的条件:

WHERe created_at > '2013-09-15 0:0'::timestamp

自动化

您可以不时手动更新索引和查询。或者,您可以借助这样的功能将其自动化:

CREATE OR REPLACe FUNCTION f_min_ts()  RETURNS timestamp LANGUAGE sql IMMUTABLE AS$$SELECT '2013-09-15 0:0'::timestamp$$

指数:

CREATE INDEX tbl_created_recently_idx ON tbl (created_at DESC);WHERe created_at > f_min_ts();

询问:

SELECT * FROM tblWHERe  created_at > f_min_ts()ORDER  BY created_at DESCLIMIT  1;

通过cron作业或某些基于触发器的事件自动进行娱乐。您的查询现在可以保持不变。但是您 需要 在更改此函数后以任何方式 重新创建所有索引
。只需拖放并创建每个。

第一的 ..

…测试您是否真的以此击中了瓶颈。

尝试是否简单地

DROP index ... ; CREATE index ...
完成工作。然后,您的索引可能已膨胀。您的自动真空设置可能已关闭。

或者尝试

VACUUM FULL ANALYZE
让您的整个表以及原始状态的索引再检查一次。

其他选项
包括常规的常规性能调整和覆盖索引,具体取决于您从表中实际获取的内容。



转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/378221.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号