PostgreSQL – SQL 优化
PostgreSQL是世界上最先进的通用开源数据库。 pgAdmin 是最流行的 PostgreSQL 管理工具或开发平台。它也是一个开源开发平台。它可以在任何操作系统中使用,并且可以作为桌面应用程序或浏览器中的网络运行。您可以从这里下载 pgAdmin 管理工具。
我们需要优化 SQL 查询,以更结构化的方式获得准确、更快的结果。这将提高进程的性能和加速。
在本文中,我们将讨论 PostgreSQL 中的各种SQL 优化技术。基本上有两种类型的优化查询:
1. 包容
- IN 子句: IN运算符主要与WHERE 子句一起使用,以测试给定的表达式或与一组值中的特定值匹配的记录。它的工作原理类似于多个 OR运算符。
- ANY 子句:用于比较,如果任何值获得子查询中提供的条件,则返回布尔值 TRUE 值。如果该范围内的任何值的条件为真,则输出为真。
- EXISTS 子句: EXISTS运算符主要用于嵌套查询(查询内的查询)。它用于检查子查询中提供的记录是否存在。如果一个或多个记录匹配,则返回布尔值 TRUE,否则在没有行匹配时返回 FALSE。
- INNER JOIN :返回两个表中匹配的值。
2. 排除
- NOT IN :它只是 IN 子句的否定,它有助于执行与值集不匹配的行。
- ALL :也用于比较,如果所有值都获得了子查询中提供的条件,则返回布尔值 TRUE 值。如果该范围内的所有值的条件都为真,则输出为真。
- NOT EXISTS :它只是 EXISTS 子句的否定。
- LEFT JOIN AND IS NULL :用于在对两个表执行LEFT JOIN操作后查找所有具有 NULL 条目的行。
让我们使用一个合适的示例来实现上述 SQL 优化技术。考虑下面显示的电子商务数据库的示例表。 Purchase Information Product ID Mobile Brand Price Customer Name 1 OnePlus Nord 5G 30000 Rishabh 2 Samsung Galaxy M51 28000 Srishti 3 iPhone 12 Pro 128000 Aman 4 Samsung Galaxy S20 55000 Harsh 5 RealMe X50 Pro 40000 Manjari 6 Mi 10i 5G 24000 Satadru Customer Information Customer ID Customer Name Email Address 1 Srishti abc@gmail.com 2 Rajdeep def@gmail.com 3 Aman xxx@gmail.com 4 Pooja xyz@gmail.com 5 Tanmoy tdq@gmail.com
基本 SQL 查询:
1. 创建数据库
CREATE DATABASE database_name
2. 创建表
CREATE TABLE Table_name(
col_1 TYPE col_1_constraint,
col_2 TYPE col_2 constraint
.....
)
col: Column name
TYPE: Data type whether an integer, variable character, etc
col_constraint: Constraints in SQL like PRIMARY KEY, NOT NULL, UNIQUE, REFERENCES, etc
3. 插入表格
INSERT INTO Table_name
VALUES(val_1, val_2, val_3, ..........)
val: Values in particular column
4. 查看表格
SELECT * FROM Table_name
包含查询:
1. 条款:
SELECT col_name(s)
FROM Table1
WHERE value IN
(SELECT col_name(s) FROM Table2
WHERE condition)
col_name : Name of the column
SELECT col_name(s)
FROM Table_Name
WHERE col_name IN (val1,val2,val3,...)
col_name : Name of the column
val1 : Values in the column
- 检索所有购买手机且价格超过三万的购买明细。
- 检索购买三星品牌手机的所有购买详情。
2. 任何条款
SELECT col_name(s)
FROM Table_Name
WHERE col_name rln_opr ANY
(SELECT col_name
FROM Table_Name
WHERE condition)
rln_opr: Relational Operator like (>,>=,<,<=,!= or <>,=)
- 从客户信息表中检索所有购买电话且价格超过三万的客户信息。
3. 存在条款
SELECT col_name(s)
FROM Table_Name WHERE EXISTS
(SELECT col_name(s)
FROM Table_Name
WHERE condition)
- 检索所有购买过手机的客户及其详细信息存在于客户信息表中。
4. 内连接
SELECT * FROM Table1
INNER JOIN Table2
ON Table1.column_match=Table2.column_match;
Table1: First Table in Database.
Table2: Second Table in Database.
column_match: The column common to both the tables.
排除查询:
1. 不在
SELECT col_name(s)
FROM Table1
WHERE value NOT IN
(SELECT col_name(s) FROM Table2
WHERE condition)
SELECT col_name(s)
FROM Table_Name
WHERE col_name NOT IN (val1,val2,val3,...)
- 检索所有购买价格不超过三万的手机的购买明细。
- 检索未购买三星品牌手机的所有购买详情。
2. 全部
SELECT col_name(s)
FROM Table_Name
WHERE col_name rln_opr ALL
(SELECT col_name
FROM Table_Name
WHERE condition)
rln_opr: Relational Operator like (>,>=,<,<=,!= or <>,=)
- 检索购买价格不低于五万的手机的购买信息。
- 检索价格大于和小于所有已售手机平均价格的手机的所有购买明细。
3. 不存在
SELECT col_name(s)
FROM Table_Name WHERE NOT EXISTS
(SELECT col_name(s)
FROM Table_Name
WHERE condition)
- 检索其信息存在于客户表中但未购买任何电话的所有客户。
4. LEFT JOIN 为空
SELECT * FROM Table1
LEFT JOIN Table2
ON Table1.column_match=Table2.column_match
WHERE Table2.col_name IS NULL
Table1: First Table in Database.
Table2: Second Table in Database.
column_match: The column common to both the tables.
同样,我们可以为所有其他JOINS 执行此操作 在 SQL。它通常与WHERE 子句一起使用,以获取连接两个或多个表后具有 NULL 条目的行。