📜  PostgreSQL – SQL 优化

📅  最后修改于: 2022-05-13 01:57:14.772000             🧑  作者: Mango

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 IDMobile BrandPriceCustomer Name
1OnePlus Nord 5G30000Rishabh
2Samsung Galaxy M5128000Srishti
3iPhone 12 Pro128000Aman
4Samsung Galaxy S2055000Harsh
5RealMe X50 Pro40000Manjari
6Mi 10i 5G24000Satadru
                   Customer Information
Customer IDCustomer NameEmail Address
1Srishtiabc@gmail.com
2Rajdeepdef@gmail.com
3Aman xxx@gmail.com
4Poojaxyz@gmail.com
5Tanmoytdq@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 <>,=)
  • 检索购买价格不低于五万的手机的购买信息。

所有输出

  • 检索价格大于和小于所有已售手机平均价格的手机的所有购买明细。

平均价格

大于所有输出

小于 ALL 输出

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 条目的行。