常用sql语句及其优化

文章目录

  • 介绍
  • 常用sql语句
    • 1. 数据查询
      • 1.1 SELECT 语句
      • 1.2 DISTINCT 关键字
      • 1.3 WHERE 子句
      • 1.4 ORDER BY 子句
      • 1.5 LIMIT 关键字
    • 2. 数据更新
      • 2.1 INSERT INTO 语句
      • 2.2 UPDATE 语句
      • 2.3 DELETE FROM 语句
    • 3. 数据管理
      • 3.1 CREATE TABLE 语句
      • 3.2 ALTER TABLE 语句
      • 3.3 DROP TABLE 语句
  • 常用关联查询表
    • 1. 内连接(INNER JOIN)
    • 2. 左连接(LEFT JOIN)
    • 3. 右连接(RIGHT JOIN)
    • 4. 全连接(FULL JOIN)
  • 多表关联
    • 1. 多表连接(JOIN)
    • 2. 联合查询(UNION)
    • 3. 子查询(Subquery)
  • sql查询性能优化
    • 1. SQL 查询语句优化
    • 1. 使用索引
    • 2. 索引优化
    • 3. 数据库统计信息
    • 4. 查询缓存
    • 5. 查询优化工具
    • 6. 数据库配置优化
    • 7. 数据分区和分片

介绍

SQL 是结构化查询语言(Structured Query Language)的简称,是用于管理关系型数据库的标准化语言。而SQL 查询性能优化是提高数据库查询速度和效率的关键步骤。通过优化 SQL 查询语句、索引设计和数据库配置,可以显著提升系统性能和响应时间。

常用sql语句

1. 数据查询

1.1 SELECT 语句

SELECT column1, column2, ...
FROM table_name
WHERE condition;
  • 用于从数据库中检索数据,可以指定需要返回的字段和条件。

1.2 DISTINCT 关键字

SELECT DISTINCT column1, column2, ...
FROM table_name;
  • 用于返回唯一不重复的值。

1.3 WHERE 子句

SELECT column1, column2, ...
FROM table_name
WHERE condition;
  • 用于过滤数据,根据指定条件筛选所需的数据。

1.4 ORDER BY 子句

SELECT column1, column2, ...
FROM table_name
ORDER BY column1 [ASC|DESC];
  • 用于对结果集进行排序,默认按升序排列,也可以指定降序排列。

1.5 LIMIT 关键字

SELECT column1, column2, ...
FROM table_name
LIMIT number_of_records;
  • 用于限制结果集的行数。

2. 数据更新

2.1 INSERT INTO 语句

INSERT INTO table_name (column1, column2, ...)
VALUES (value1, value2, ...);
  • 用于向表中插入新的行。

2.2 UPDATE 语句

UPDATE table_name
SET column1 = value1, column2 = value2, ...
WHERE condition;
  • 用于修改表中已有的数据。

2.3 DELETE FROM 语句

DELETE FROM table_name
WHERE condition;
  • 用于删除表中的行。

3. 数据管理

3.1 CREATE TABLE 语句

CREATE TABLE table_name (column1 datatype,column2 datatype,...
);
  • 用于创建新的表格。

3.2 ALTER TABLE 语句

ALTER TABLE table_name
ADD column_name datatype;
  • 用于向表中添加新的列。

3.3 DROP TABLE 语句

DROP TABLE table_name;
  • 用于删除整个表。

常用关联查询表

1. 内连接(INNER JOIN)

内连接是最常用的连接方式,它会返回两个表中满足连接条件的行。语法如下:

SELECT columns
FROM table1
INNER JOIN table2 ON table1.column = table2.column;
  • 示例:
SELECT orders.order_id, customers.customer_name
FROM orders
INNER JOIN customers ON orders.customer_id = customers.customer_id;

2. 左连接(LEFT JOIN)

左连接会返回左表中所有行,以及右表中满足连接条件的行。如果右表中没有匹配的行,则返回 NULL 值。语法如下:

SELECT columns
FROM table1
LEFT JOIN table2 ON table1.column = table2.column;
  • 示例:
SELECT customers.customer_name, orders.order_id
FROM customers
LEFT JOIN orders ON customers.customer_id = orders.customer_id;

3. 右连接(RIGHT JOIN)

右连接与左连接相反,会返回右表中所有行,以及左表中满足连接条件的行。如果左表中没有匹配的行,则返回 NULL 值。语法如下:

SELECT columns
FROM table1
RIGHT JOIN table2 ON table1.column = table2.column;
  • 示例:
SELECT orders.order_id, customers.customer_name
FROM orders
RIGHT JOIN customers ON orders.customer_id = customers.customer_id;

4. 全连接(FULL JOIN)

全连接会返回两个表中所有的行,无论是否满足连接条件。如果某个表中没有匹配的行,则返回 NULL 值。语法如下:

SELECT columns
FROM table1
FULL JOIN table2 ON table1.column = table2.column;
  • 示例:
SELECT customers.customer_name, orders.order_id
FROM customers
FULL JOIN orders ON customers.customer_id = orders.customer_id;

多表关联

1. 多表连接(JOIN)

多表连接用于将多个表按照指定条件进行连接,以获取符合条件的数据。常见的连接类型包括 INNER JOIN、LEFT JOIN、RIGHT JOIN 和 FULL JOIN。语法如下:

SELECT columns
FROM table1
JOIN table2 ON table1.column = table2.column
JOIN table3 ON table2.column = table3.column
...
  • 示例:
SELECT orders.order_id, customers.customer_name, products.product_name
FROM orders
JOIN customers ON orders.customer_id = customers.customer_id
JOIN products ON orders.product_id = products.product_id;

2. 联合查询(UNION)

联合查询用于合并多个 SELECT 语句的结果集,并去除重复行。语法如下:

SELECT columns FROM table1
UNION
SELECT columns FROM table2
UNION
SELECT columns FROM table3
...
  • 示例:
SELECT product_name FROM products
UNION
SELECT product_name FROM archived_products;

3. 子查询(Subquery)

子查询是嵌套在其他查询语句中的查询,可以用来作为条件、筛选规则或者结果集的一部分。语法如下:

SELECT columns
FROM table
WHERE column IN (SELECT column FROM another_table WHERE condition);
  • 示例:
SELECT order_id, order_date
FROM orders
WHERE customer_id IN (SELECT customer_id FROM customers WHERE country = 'USA');

sql查询性能优化

SQL 查询性能优化是提高数据库查询速度和效率的关键步骤。通过优化 SQL 查询语句、索引设计和数据库配置,可以显著提升系统性能和响应时间。

1. SQL 查询语句优化

1. 使用索引

  • 在经常用于检索数据的列上创建索引,可以加快查询速度。
CREATE INDEX index_name ON table_name(column_name);
  1. 避免 SELECT *
  • 尽量避免使用 SELECT *,而是明确列出需要查询的列,避免检索不必要的数据。
  1. 使用 WHERE 子句
  • 在查询中尽量使用 WHERE 子句进行条件过滤,减少返回结果集的大小。
  1. 使用 JOIN 条件
  • 确保 JOIN 操作中有合适的连接条件,避免出现笛卡尔积(Cartesian Product)。
  1. 避免嵌套查询
  • 尽量避免使用嵌套查询,可以考虑使用 JOIN 或子查询来替代。
  1. 使用 EXISTS 替代 IN
  • 在需要检查子查询是否返回结果时,使用 EXISTS 关键字比 IN 关键字效率更高。
  1. 避免使用通配符在 WHERE 子句开头
  • 避免在 WHERE 子句中使用通配符(如 %)开头,这会导致索引失效。
  1. 使用 LIMIT 限制结果集大小
  • 在查询中使用 LIMIT 关键字限制返回结果的数量,避免返回过多数据。
  1. 使用 UNION ALL 替代 UNION
  • 如果不需要去重操作,尽量使用 UNION ALL 而不是 UNION,因为 UNION 会执行去重操作,消耗额外性能。
  1. 定期优化表结构
  • 定期对数据库表进行优化,包括删除不必要的索引、重建索引、压缩表等操作。

通过合理使用以上 SQL 查询语句优化关键字和技巧,可以有效提升数据库查询性能和效率,让查询操作更加快速和高效。希木这些技巧对您有所帮助,如果有任何问题或需要进一步帮助,请随时提问!

2. 索引优化

  1. 选择合适的列进行索引
  • 需要对经常用于检索数据的列进行索引,例如常用于 WHERE 子句、JOIN 条件和 ORDER BY 子句的列。
  1. 考虑多列索引
  • 在需要同时检索多个列的查询中,考虑创建多列索引,以提高联合条件查询的效率。
  1. 避免在频繁更新的列上创建索引
  • 对于频繁进行插入、删除和更新操作的列,不宜过度创建索引,因为索引的维护会增加额外的开销。
  1. 考虑使用覆盖索引
  • 覆盖索引是指索引包含了查询需要的所有列,避免了回表查询,可以提高查询效率。
  1. 定期重新构建索引
  • 对于数据量变化较大的表,定期重新构建索引可以帮助优化索引的性能。
  1. 使用索引提示
  • 在某些情况下,数据库可能无法正确选择最优的索引,可以考虑使用索引提示来指导数据库查询优化器选择合适的索引。
  1. 监视索引的使用情况
  • 通过监视数据库索引的使用情况,可以及时发现哪些索引没有被使用或者需要优化。
  1. 考虑部分索引
  • 对于只有部分数据需要索引的列,可以考虑创建部分索引,以减少索引的大小和维护成本。
  1. 使用索引优化工具
  • 可以使用数据库管理工具或者专门的索引优化工具来分析索引的性能,并提出优化建议。
  1. 注意索引与性能的平衡
  • 创建过多的索引可能会增加数据库的维护开销,需要权衡索引对查询性能的提升和维护成本之间的关系。

3. 数据库统计信息

  1. 表统计信息
  • 表的大小:包括表的行数、占用的存储空间大小等。
  • 表的平均行长度:用于估算表的存储空间需求和查询性能。
  • 表的更新时间:记录表最后一次更新的时间戳,用于查询数据的实时性。
  1. 索引统计信息
  • 索引的大小:包括索引占用的存储空间大小。
  • 索引的选择性:衡量索引的唯一性,选择性越高表示重复值越少,性能越好。
  • 索引的使用频率:记录索引被查询的次数,用于评估索引的实际效益。
  1. 列统计信息
  • 列的基本信息:包括列的数据类型、长度、是否允许空值等。
  • 列的数据分布:统计列中不同取值的频率和分布情况,用于优化查询条件。
  • 列的最大值和最小值:用于确定列的范围和数据分布情况。
  1. 查询执行计划统计信息
  • 查询执行计划:记录数据库查询的执行路径、操作顺序和访问方法,用于优化查询性能。
  • 查询优化器统计信息:包括查询优化器对索引、表和连接方式的估算成本和选择依据。
  1. 数据库性能监控指标
  • 数据库连接数:记录当前数据库的连接数和连接池使用情况。
  • 查询响应时间:统计数据库查询的响应时间,用于评估数据库性能。
  • 缓存命中率:记录数据库缓存的命中率,用于评估缓存效果和优化缓存设置。

4. 查询缓存

  1. 什么是查询缓存?
    查询缓存是数据库管理系统中的一个缓存机制,用于存储已经执行过的查询结果,以便在接收到相同查询请求时能够直接返回缓存结果,而无需重新执行查询操作。
  2. 查询缓存如何工作?
    当一个查询语句被执行后,数据库会将查询结果存储在内存中的缓存中,同时记录查询语句和对应的结果。当下次有相同的查询请求到达时,数据库会首先检查缓存中是否存在相同的查询语句,如果有,则直接返回缓存结果,避免了重复执行查询操作。
  3. 查询缓存的优势是什么?
  • 提高查询性能:避免了重复执行相同查询语句,减少了查询响应时间。
  • 减轻系统负载:减少了数据库服务器的计算和IO开销,提高了系统的并发处理能力。
  1. 查询缓存存在哪些问题?
  • 缓存命中率:如果缓存中没有需要的查询结果,就无法利用查询缓存,影响性能提升效果。
  • 缓存失效:当数据库数据发生变化时,缓存中的查询结果可能会失效,需要及时更新缓存。
  1. 如何管理查询缓存?
  • 合理设置缓存大小:根据系统需求和内存资源设置合适的缓存大小。
  • 定期清理缓存:避免缓存过期或者存储无效数据,定期清理缓存可以提高效率。
  • 监控缓存命中率:监控缓存命中率可以评估缓存效果,及时调整缓存策略。

5. 查询优化工具

  • 使用数据库性能分析工具来监控查询执行计划和性能瓶颈,及时发现并解决问题。
  • 使用 Explain Plan 来查看查询执行计划,分析索引是否被正确使用。

6. 数据库配置优化

  • 调整数据库参数设置,如内存分配、并发连接数等,以提高查询性能和系统稳定性。

7. 数据分区和分片

  • 对大型表进行数据分区或分片,可以减少查询范围,提高查询性能。
  • 合理设计数据分区策略,确保数据均匀分布,避免单一分区数据过大导致性能问题。

点赞.jpg

各位看官》创作不易,点个赞!!!
诸君共勉:万事开头难,只愿肯放弃。

免责声明:本文章仅用于学习参考

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/712462.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

批量自动加好友神器!微信快速扩友秘籍!

对于一些个人或者企业来说,传统的人工添加好友方式往往会出现效率低下,费时费力的问题。那么,有没有一种快速、便捷、安全的方式来解决这个问题呢?答案当然是肯定的,那就是通过使用微信管理系统来解决这一问题。 在微…

基于java+springboot景区行李寄存管理系统设计和实现

基于javaspringboot景区行李寄存管理系统设计和实现 博主介绍:多年java开发经验,专注Java开发、定制、远程、文档编写指导等,csdn特邀作者、专注于Java技术领域 作者主页 央顺技术团队 Java毕设项目精品实战案例《1000套》 欢迎点赞 收藏 ⭐留言 文末获取…

5GC SBA架构

协议标准:Directory Listing /ftp/Specs/archive/23_series/23.501/ (3gpp.org) NF描述说明NSSFNetwork Slice Selection Function网络切片选择,根据UE的切片选择辅助信息、签约信息等确定UE允许接入的网络切片实例。NEF Network Exposure Function网络开…

疾控中心的污水采样瓶用的是什么材质

疾控中心的污水采样瓶采用的材质是聚乙烯或聚丙烯塑料。这种材质的污水采样瓶具有耐腐蚀、耐高压、无毒无味、重量轻、易于携带等优点。此外,这种材质的污水采样瓶还可以在高温下消毒,不会变形或破裂。 疾控中心的污水采样瓶通常有不同的容积和形状&…

Harbor高可用(haproxy和keepalived)

Harbor高可用(haproxy和keepalived) 文章目录 Harbor高可用(haproxy和keepalived)1.Harbor高可用集群部署架构1.1 主机初始化1.1.1 设置网卡名和ip地址1.1.2 设置主机名1.1.3 配置镜像源1.1.4 关闭防火墙1.1.5 禁用SELinux1.1.6 设…

SpringBoot 自定义映射规则resultMap association一对一

介绍 例:学生表,班级表,希望在查询学生的时候一起返回该学生的班级,而一个实体类封装的是一个表,如需要多表查询就需要自定义映射。 表结构 班级表 学生表 SQL语句 SELECT a.id,a.name,a.classes,b.id classes…

Charles抓包 - 安装、激活、证书配置

最近刚好又遇到了抓包的需求,之前一直使用 Fiddler 抓包,这几年一直听大家都在用 Charles 抓包,正好一起了解下(一般建议掌握一种抓包方式即可,都可以解决同种需求场景) 抓包 Fiddler抓包 Charles 下载、安…

2024年新提出的算法|LEA爱情进化算法(Love Evolution Algorithm)

Love Evolution Algorithm: a stimulus–value–role theory-inspired evolutionary algorithm for global optimization 爱情进化算法Love Evolution Algorithm,LEA,于2024年2月发表在中科院3区SCI期刊 The Journal of Supercomputing。 1、简介 本文提…

幸运星数(爷再也不想用pow了)

解法&#xff1a; 暴力 #include <iostream> #include <vector> using namespace std; #define endl \nint main() {ios::sync_with_stdio(false);cin.tie(0); cout.tie(0);int n;long long sum 0, a;cin >> n;for (int i 1; i < n; i) {a 1;for (in…

蓝桥杯刷题2

1. 修建灌木 import java.util.Scanner;public class Main {public static void main(String[] args) {Scanner scan new Scanner(System.in);int n scan.nextInt();for (int i 1;i < n1;i){int distance Math.max(i-1,n-i);System.out.println(distance*2);}scan.close…

种花

分情况&#xff1a; 第一盆k种选择&#xff0c;之后全部k-1种选择 每次相乘结果对1e97取模 #include <iostream> #include <vector> #include <algorithm> using namespace std; #define endl \n const int N 1e9 7;int main() {ios::sync_with_stdio(f…

微信小程序iOS禁止上下拉显示白边

先上图暴露出问题 iOS端这个页面明明正好显示的&#xff0c;非要能下拉上拉给显示出来点白边。这样不就不好看了嘛。。 想了想是不是支持页面下拉导致的&#xff0c;加入以下代码到json文件中。 {"enablePullDownRefresh": false,"usingComponents": {} }…

java009 - Java面向对象基础

1、类和对象 1.1 什么是对象 万物皆对象&#xff0c;客观存在的事物皆为对象。 1.2 什么是面向对象 1.3 什么是类 类是对现实生活中一类具有共同属性和行为的事物抽象。 特点&#xff1a; 类是对象的数据类型类是具有相同属性和行为的一组对象的集合 1.4 什么是对象的属…

project.config.json 文件内容错误] project.config.json: libVersion 字段需为 string, string

家人们&#xff0c;遇到了一个新的报错 于是从网上找了各种方法&#xff0c;有说把开发者工具关闭重启的&#xff0c;有说开发者工具下载重新下载的&#xff0c;有说开发者工具路径安装得在C盘的&#xff0c;均没有效果 解决方法&#xff1a; 1、运行项目&#xff0c;在开发者…

好的测试数据管理,到底要怎么做?

你的组织是否实施了测试数据管理&#xff1f;如果你的组织处理关键或敏感的业务数据&#xff0c;测试数据管理肯定会让组织受益。与测试数据相关的问题占所有软件缺陷的 15%&#xff0c;这一事实强调了测试数据的重要性。本文将准确讨论测试数据经理职责、测试数据经理需要什么…

java-ssm-jsp广播剧制作订阅系统

java-ssm-jsp广播剧制作订阅系统 获取源码——》公主号&#xff1a;计算机专业毕设大全

13.网络游戏逆向分析与漏洞攻防-网络通信数据包分析工具-如果没有工具就创造工具

内容参考于&#xff1a; 易道云信息技术研究院VIP课 上一个内容 &#xff1a;12.游戏网络通信存在的问题 现在把游戏网络的架构看了一个小小的大概&#xff0c;可以用它的接口发数据接收数据了&#xff0c;如果真正想用它这一套东西&#xff0c;真正核心不在于它的接口而在于…

2024GAS《声学大讲堂》

由中国电子音响行业协会主办&#xff0c;上海市浦东新区先进音视频技术协会承办的GAS《声学大讲堂》2021年开播&#xff0c;三年来GAS《声学大讲堂》开设了“沉浸声音频与艺术”、“智能车载音频”、“智能可穿戴”、“智能耳机”、“智能音箱”、“专业音响”、“助听/辅听设备…

R语言安装和简单入门HelloWorld用法

R语言安装和简单入门HelloWorld用法 #R语言安装地址 https://www.r-project.org/ click->CRAN mirror->选择China下列表&#xff1a; https://mirrors.tuna.tsinghua.edu.cn/CRAN/ 选择Download R for Windows 选择base Download R-4.3.2 for Windows 下载文件R-4.3.2-…

数据结构从入门到精通——算法的时间复杂度和空间复杂度

算法的时间复杂度和空间复杂度 前言一、算法效率1.1 如何衡量一个算法的好坏1.2 算法的复杂度 二、时间复杂度2.1 时间复杂度的概念2.2 大O的渐进表示法2.3常见时间复杂度计算举例2.4等差数列计算公式2.5等比数列计算方法 三、空间复杂度四、 常见复杂度对比五、 复杂度的oj练习…