当前位置: 首页 > news >正文

东营网站建设东营市南一路东营软件园英厦门网站制作全程服务

东营网站建设东营市南一路东营软件园英,厦门网站制作全程服务,微信购物商城小程序怎么弄,基本型电商网站举例一、LOCALE 与 “operator class” 在PostgreSQL里,LOCALE默认使用C的本地化规则。LOCALE是一种文化偏好的区域设置,包括字母表、排序、数字格式等。 LOCALE里有一个比较重要的规则LC_COLLATE,即排序方式(Collation),它会对数据…

一、LOCALE 与 “operator class”

在PostgreSQL里,LOCALE默认使用C的本地化规则。LOCALE是一种文化偏好的区域设置,包括字母表、排序、数字格式等。

LOCALE里有一个比较重要的规则LC_COLLATE,即排序方式(Collation),它会对数据库行为有显著影响。

当数据库里运行一个like查询,DB上使用非C LOCALE,普通索引可能不支持like操作,普通索引创建时我们通常不会显式指定operator class,示例如下:

CREATE INDEX ON users (email);

那下面like查询的执行计划可以看到走全表扫描。

postgres=# EXPLAIN SELECT * FROM users WHERE email LIKE 'lukas@%';QUERY PLAN                                 
-------------------------------------------------------------------------Seq Scan on users  (cost=10000000000.00..10000000001.26 rows=1 width=4463)Filter: ((email)::text ~~ 'lukas@%'::text)
(2 rows)

如果进行引导,明确使用文本模式操作符text_pattern_ops。

CREATE INDEX ON users (email text_pattern_ops);

那下面的执行计划可以看到也能正常使用索引。

postgres=# EXPLAIN SELECT * FROM users WHERE email LIKE 'lukas@%';QUERY PLAN                                         
--------------------------------------------------------------------------Index Scan using users_email_idx on users  (cost=0.14..8.16 rows=1 width=4463)Index Cond: (((email)::text ~>=~ 'lukas@'::text) AND ((email)::text ~<~ 'lukasA'::text))Filter: ((email)::text ~~ 'lukas@%'::text)
(3 rows)

二、Trigger 与 Transition Table

trigger触发器通常以串行方式工作,例如下面为了提高item大表count总数的性能,使用触发器更新随时将总数更新到sum表,便于快速统计。

CREATE TABLE item (id bigint GENERATED ALWAYS AS IDENTITY,value bigint NOT NULL
);CREATE TABLE sum (total bigint NOT NULL
);INSERT INTO sum VALUES (0);CREATE FUNCTION add_to_sum() RETURNS triggerLANGUAGE plpgsql AS
$$BEGINUPDATE sum SET total = total + NEW.value;RETURN NEW;
END;$$;CREATE CONSTRAINT TRIGGER add_to_sumAFTER INSERT ON itemDEFERRABLE INITIALLY DEFERREDFOR EACH ROWEXECUTE FUNCTION add_to_sum();

但是如果item表有比较频繁的批量操作,尤其还在一个事务里会引起dead tuple回收不及时,那基于触发器统计更新数据会变得越来越慢。

此时使用触发器的transition table过渡表特性,在内存中批量处理性能提升会比较明显。

DROP TRIGGER add_to_sum ON item;CREATE OR REPLACE FUNCTION add_to_sum() RETURNS triggerLANGUAGE plpgsql AS
$$BEGINUPDATE sum SET total = total +(SELECT sum(value) FROM new_rows);RETURN NULL;
END;$$;CREATE TRIGGER add_to_sumAFTER INSERT ON itemREFERENCING NEW TABLE AS new_rowsFOR EACH STATEMENTEXECUTE FUNCTION add_to_sum();

三、Case 与 Filter

在PostgreSQL的聚合函数中可以使用CASE或FILTER来过来数据:

查询一:使用case

SELECTfa.actor_id,SUM(CASE WHEN rating = 'R' THEN length END),SUM(CASE WHEN rating = 'PG' THEN length END)
FROM film_actor AS fa 
LEFT JOIN film AS f ON f.film_id = fa.film_id
GROUP BY fa.actor_id

查询二:使用filter

SELECTfa.actor_id,SUM(length) FILTER (WHERE rating = 'R'),SUM(length) FILTER (WHERE rating = 'PG'),
FROM film_actor AS fa 
LEFT JOIN film AS f ON f.film_id = fa.film_id
GROUP BY fa.actor_id

上面的两个查询功能是一样的,有人在docker运行PostgreSQL 15的环境测试对比,使用CASE语法会有8%的性能损失。FILTER的性能更好且语法更简洁。

http://www.hkea.cn/news/194037/

相关文章:

  • 网站后台生成器人工智能培训班收费标准
  • 在线做app的网站武汉网络营销公司排名
  • 了解深圳网站页面设计潍坊百度关键词优化
  • 制作网站怎样找公司来帮做seo词条
  • 网络销售有哪些站长工具seo排名
  • 做房产中介网站怎么注册一个自己的网站
  • 天津网站设计成功柚米全网推广成功再收费
  • 建设公司网站靠谱吗企业网站设计制作
  • 电子商务学什么课程内容兰州搜索引擎优化
  • 沧州网站建设制作设计优化能打开的a站
  • 石家庄网站建设推广报价怎么让百度快速收录网站
  • 建设局网站上开工日期选不了制作网站需要多少费用
  • 犬舍网站怎么做网页推广怎么做
  • 镇江核酸检测最新通知如何优化网页加载速度
  • wpf入可以做网站吗竞价托管外包费用
  • 公司设计网站需要包含什么资料优化排名软件
  • 日本樱花云服务器wan亚马逊seo关键词优化软件
  • layui框架的wordpress厦门站长优化工具
  • 微网站设计尺寸培训课程总结
  • 保险平台官网湖北搜索引擎优化
  • 西安微信小程序制作公司关键词优化方法
  • 手机网站建设用乐云seo搜索引擎是什么意思啊
  • 昆明做大的网站开发公司google网页搜索
  • 做网站运营需要什么证宁波靠谱营销型网站建设
  • 天津进口网站建设电话青岛网站建设公司
  • 游戏币网站建设win7优化大师官方网站
  • 技术专业网站建设班级优化大师网页版登录
  • 外国网站上做雅思考试台州百度推广优化
  • 男女做那种的的视频网站国内最好的搜索引擎
  • 泉州做网站优化价格成功品牌策划案例