常用sql语句及其优化

news2024/11/13 15:22:24

文章目录

  • 介绍
  • 常用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.coloradmin.cn/o/1481379.html

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

相关文章

gpt-3.5-turbo与星火认知大模型v3.5回答对比

创建kernel // Create a kernel with OpenAI chat completionKernel kernel Kernel.CreateBuilder().AddOpenAIChatCompletion(modelId:"使用的模型id" ,apiKey: "APIKey").Build();使用讯飞星火认知大模型的话,可以参考我这一篇文章&#xff…

qt5-入门-使用拖动方式创建Dialog

参考: C GUI Programming with Qt 4, Second Edition 本地环境: win10专业版,64位,Qt5.12 目录 实现效果基本流程逐步实操1)创建和初始化子部件2)把子部件放进布局中3)设置tab顺序4&#xff09…

十八:Java8新特性

文章目录 01、Java8概述02、Java8新特性的好处03、并行流与串行流04、Lambda表达式4.1、Lambda表达式使用举例4.2、Lambda表达式语法的使用14.3、Lambda表达式语法的使用2 05、函数式(Functional)接口5.1、函数式接口的介绍5.2、Java内置的函数式接口介绍及使用举例 06、方法引…

Nodejs基于vue的个性化服装衣服穿搭搭配系统sprinboot+django+php

本个性化服装搭配系统主要根据用户数据信息,推荐一些适合的搭配穿搭,同时,用户也可自己扫描上传自身衣物以及输入存放位置,搭配后存储到“我的搭配”中,以便下次挑选,既可以节省搭配时间,也方便…

vue3 构建项目

一.使用vite构建: npm init vitelatest 项目名称 构建的项目模板 进入项目 cd 项目名称 安装项目依赖包 npm install 启动项目 npm run dev 二.使用vue脚手架构建: npm init vuelatest 后续基本差不多

安全防御(第六次作业)

攻击可能只是一个点, 防御需要全方面进行 IAE引擎 DFI和DPI技术 --- 深度检测技术 DPI --- 深度包检测技术 --- 主要针对完整的数据包(数据包分片,分段需要重组) ,之后对 数据包的内容进行识别。(应用层&a…

mock工具whistle使用笔记

1、下载安装地址:关于whistle GitBook 安装完后,用本地的ip:设置的端口就可以反问,端口默认的8899,可以自定义 2、抓包https: (1)打开https (2)下载证书&…

从8.8到9.9,涨价的库迪还能守住牌局吗?

作者 | 辰纹 来源 | 洞见新研社 历经超半年的9.9元活动后,瑞幸不仅牢牢守稳盈利态势,还一举创造了新的神话——中国地区年收入首超星巴克。 根据瑞幸咖啡发布的截至12月31日的2023年第四季度及全年财报。第四季度,瑞幸咖啡净营收为70.6亿元…

Talk|上海交通大学晋嘉睿:序列建模技术在推荐系统中的应用

本期为TechBeat人工智能社区第574期线上Talk。 北京时间2月28日(周三)20:00,上海交通大学博士生—晋嘉睿的Talk已准时在TechBeat人工智能社区开播! 他与大家分享的主题是: “序列建模技术在推荐系统中的应用”,系统地介绍了他们在序列数据的建…

C++数据结构与算法——二叉搜索树的属性

C第二阶段——数据结构和算法,之前学过一点点数据结构,当时是基于Python来学习的,现在基于C查漏补缺,尤其是树的部分。这一部分计划一个月,主要利用代码随想录来学习,刷题使用力扣网站,不定时更…

【数据库管理系统】Mysql 8.0.36入门级安装

下载地址 官方网址:MySQL 注意事项 建议不要安装最新版本,一般找mysql5.0或mysql8.0系列版本即可;mysq1官网有.zip和.msi两种安装形式;zip是压缩包,直接解压缩以后使用的,需要自己配置各种东西&#xff…

用按位或、按位与取反实现权限的增减

一、介绍: 在Linux操作系统中: r -4:可读权限 w -2:可写权限 x -1:可执行权限 问题1:三个权限为1,2,4,分别对应:2^0,2^1,2^2,为什么要用8进制表示用户的文件权限? …

Java毕业设计 基于SpringBoot vue 社区团购系统

Java毕业设计 基于SpringBoot vue 社区团购系统 SpringBoot vue 社区团购系统 功能介绍 前端用户: 首页 图片轮播 商品信息 商品分类展示 搜索 商品详情 点我收藏 添加到购物车 立即购买 我要开团 去参团 评论 公告资讯 资讯详情 登录 注册 个人中心 更新信息 点我充值 我的订…

三、《任务列表案例》前端程序搭建和运行

本章概要 整合案例介绍和接口分析 案例功能预览接口分析 前端工程导入 前端环境搭建导入前端程序 启动测试 3.1 整合案例介绍和接口分析 3.1.1 案例功能预览 3.1.2 接口分析 学习计划分页查询 /* 需求说明查询全部数据页数据 请求urischedule/{pageSize}/{currentPage} 请…

、JMETER与它的组件们

os进程取样器 这个取样器可以让jmeter直接调用python写的测试数据 这样就可以调用python写的测试数据给到jmeter进行调用 注意:1建议python返回转json格式dumps一下;2py文件中需要把结果打印出来,可以不用函数直接编写 传到jmeter之后可以用…

【嵌入式学习】网络编程day0229

一、思维导图 二、练习 TCP通信 服务器 #include <myhead.h> #define SER_IP "192.168.126.42" #define SER_PORT 8888 int main(int argc, const char *argv[]) {int wfd-1;//创建套接字if((wfdsocket(AF_INET,SOCK_STREAM,0))-1){perror("error"…

Nginx多次代理后获取真实的用户IP访问地址

需求&#xff1a;记录用户操作记录&#xff0c;类似如下表格的这样 PS: 注意无论你的服务是Http访问还是Https 访问的都是可以的&#xff0c;我们服务之前是客户只给开放了一个端口&#xff0c;但是既要支持https又要支持http协议&#xff0c;nginx 是可以通过stream 模块配置双…

设计模式-结构模式-装饰模式

装饰模式&#xff08;Decorator Pattern&#xff09;&#xff1a;动态地给一个对象增加一些额外的职责&#xff0c;就增加对象功能来说&#xff0c;装饰模式比生成子类实现更为灵活。装饰模式是一种对象结构型模式。 //首先&#xff0c;定义一个组件接口&#xff1a; public in…

【Python笔记-设计模式】策略模式

一、说明 策略模式是一种行为设计模式&#xff0c;它定义了一系列算法&#xff0c;将每个算法封装起来&#xff0c;并使它们可以互相替换。 (一) 解决问题 在需要根据不同情况选择不同算法或策略&#xff0c;规避不断开发新需求后&#xff0c;代码变得非常臃肿难以维护管理。…

python实现常见一元随机变量的概率分布

一. 随机变量 随机变量是一个从样本空间 Ω \Omega Ω到实数空间 R R R的函数&#xff0c;比如随机变量 X X X可以表示投骰子的点数。随机变量一般可以分为两类&#xff1a; 离散型随机变量&#xff1a;随机变量的取值为有限个。连续型随机变量&#xff1a;随机变量的取值是连…