开发者社区> 问答> 正文

psql查询中的点表示法-有什么区别?

在一些Rails代码中,我找到了以下几行:

User.where('created_at >= ?', '2018-10-10').count
# which results in:
SELECT COUNT(*) FROM "users" WHERE (created_at >= '2018-10-10')
=> 1234

User.where('users.created_at >= ?', '2018-10-10').count
# which results in:
SELECT COUNT(*) FROM "users" WHERE (users.created_at >= '2018-10-10')
=> 1234

是否有使用什么区别WHERE users.created_at和WHERE created_at?

展开
收起
几许相思几点泪 2019-12-23 22:08:01 876 0
1 条回答
写回答
取消 提交回答
  • 第一种方法:

    SELECT * from xzqhdm as xz where xz.shape is not null and EXISTS (select ci.id from t_city as ci where st_intersects(ci.geom,xz.shape) LIMIT 1) LIMIT 10000

    查询10000个点用了3.7秒,当只查询点信息,这种方式是最快的(不输出面信息)

    查询方式和程序中处理比较像:

    外层循环取出一个值与内层循环中的值比较,有一个如何,则将外层的数据加入到一个返回变量中,最后返回这个变量

    第二种

    select * from xzqhdm xz left JOIN t_city as ci on st_intersects(ci.geom,xz.shape) where xz.shape is not null LIMIT 10000

    查询10000 个点用了13秒,比第一种慢,但是会携带面信息

    查询方式,利用左连接,将两张表以包含关系结合然会返回需要的条数

    第三种

    如果数据变化不大的情况,可以将这种关联关系事先存在一张表中,可以达到毫秒级查询速度,数据变动之后,根据变化的数据更新关系即可

    2019-12-24 16:59:44
    赞同 展开评论 打赏
问答分类:
问答地址:
问答排行榜
最热
最新

相关电子书

更多
低代码开发师(初级)实战教程 立即下载
冬季实战营第三期:MySQL数据库进阶实战 立即下载
阿里巴巴DevOps 最佳实践手册 立即下载