暂无图片
暂无图片
暂无图片
暂无图片
暂无图片
PostgreSQL 查询筛选条件一改,性能提升百倍.doc
15
7页
5次
2025-03-27
免费下载
PostgreSQL
查询筛选条件一改,性能提升百倍!
时,我们需要评估和改进查询中
WHERE
子句部分,对
筛选条件的细微更改都可能会对查询性能产生巨大影响。
1
、避免在筛选条件中使用函数
选阶段将数应用于列会降低能。数据需要在筛
数据
timestamp
段进行筛选的简单示例:
SELECT count(*)
FROM orders
WHERE CAST(order_timestamp AS DATE) >= '2024-02-
01';
100000000
01 min 53
sec
,因为它需要在应用筛选条件之前,
order_timestamp
列的数据类型从
timestamp
更改为
date
。但是,那不是必需
请注于上,根数据其重
写为:
SELECT count(*)
FROM orders
WHERE order_timestamp >= '2024-02-01 00:00:00';
使了原
在完成如此微小的更改之后,现在查询可以在
20 sec
内运行完,
速度比原始查询快了近
6
倍。
Filter using native column types
所有的函都可以避免掉,因可能需要些函数,
分(
substring
,每筛选加函考虑使用
原始的数据类型运算符进行替代。
最佳实践
选条件应于一个列时,请尝调整筛选件的格式
而不是列的格式。
上是一个完美的示例:将过滤条件的格式,从日
2024-
02-01
2024-02-01 00:00:00
们使用原始的时间戳数据格式和运算符。
专业建议
如果必须要应用函数,您可以尝试以下两个方法:
PostgreSQL
MySQL
中都是可行的
使用数据库触发器,来填充要进行转换的附加列
2
、改进子查询
询通常用筛选条件中,以检出一个数集合,来
筛选一个例是索出过的
用户列表时。
SELECT *
FROM users
WHERE id IN (
SELECT DISTINCT user_id
FROM sessions
WHERE session_date = '2024-02-01');
上面的查询从
SESSIONS
表中检索出不同的用户列表,然后
USERS
可以实现相同的结果。一个例子是使用
EXISTS
SELECT *
FROM users
WHERE EXISTS (
SELECT user_id
FROM sessions
WHERE user_id = id and session_date = '2024-02-01');
EXISTS
的速度更快,因为它不需要从
SESSION
表中检索不
户的而是于特在表在至
少一行。上面的用例只是更改了子查询部分,性能就从
02 min
of 7
免费下载
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文档的来源(墨天轮),文档链接,文档作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。