SQL常用脚本查询大全,包含优化

创建25个具体的优化语句及其说明确实是一个庞大的任务,特别是考虑到不同的数据库和查询场景需要不同的优化策略。
我将继续提供一系列的优化示例和技巧,这将帮助涵盖更多常见的优化场景。

1. 避免使用HAVING来过滤行
    
    -- 使用WHERE过滤条件,而非HAVING,除非是对GROUP BY的结果进行过滤
    SELECT column_name, COUNT(*)
    FROM table_name
    WHERE column_name = 'value'
    GROUP BY column_name;
    

2. 使用INNER JOIN代替CROSS JOIN
    
    -- 当需要连接两个表时,明确条件以避免笛卡尔积
    SELECT a.column1, b.column2
    FROM table_a a
    INNER JOIN table_b b ON a.id = b.a_id;
    

3. 限制JOIN操作中的行数
    
    -- 在JOIN操作前使用derived tables或者subqueries来限制行数
    SELECT a.column1, b.column2
    FROM (SELECT * FROM table_a LIMIT 100) a
    JOIN table_b b ON a.id = b.a_id;
    
    
4. 优化OR条件
    
    -- 将OR条件重写为UNION如果可能,以利用索引
    SELECT * FROM table_name WHERE column1 = 'value1'
    UNION
    SELECT * FROM table_name WHERE column2 = 'value2';
    

5. 减少对外部表的依赖
    
    -- 尽量避免在查询中频繁引用外部表
    SELECT column1 FROM table_a
    WHERE EXISTS (SELECT 1 FROM table_b WHERE table_a.id = table_b.a_id);
    

6. 使用EXISTS代替IN
    
    -- 当子查询返回大量行时,使用EXISTS比IN更高效
    SELECT * FROM table_name a
    WHERE EXISTS (SELECT 1 FROM other_table b WHERE a.id = b.a_id);
    

7. 合理使用索引覆盖
    
    -- 选择只包含索引列的数据,避免读取整行数据
    SELECT indexed_column FROM table_name WHERE indexed_column = 'value';
    

8. 避免更新索引列
    
    -- 避免频繁更新索引列,因为这会导致索引重建
    UPDATE table_name SET non_indexed_column = 'value' WHERE condition;
    

9. 使用临时表存储中间结果
    
    -- 对复杂查询使用临时表来存储中间结果
    CREATE TEMPORARY TABLE temp_result AS
    SELECT * FROM table_name WHERE condition;
    

10. 分区表以提高查询性能
    
    -- 对大型表使用分区可以提高查询和维护速度
    CREATE TABLE partitioned_table (
    column1 INT,
    column2 DATE
    ) PARTITION BY RANGE (column2);
    

11. 利用索引扫描代替全表扫描
    
    -- 确保WHERE子句中的条件可以利用索引,避免全表扫描
    SELECT * FROM table_name WHERE indexed_column = 'value';
    

12. 避免在索引列上使用函数
    
    -- 使用索引列作为直接条件,而不是函数的参数
    SELECT * FROM table_name WHERE indexed_column = 'value';
    -- 而不是
    SELECT * FROM table_name WHERE FUNCTION(indexed_column) = 'value';
    

13. 利用批量插入减少事务成本
    
    -- 使用单个批量插入,而不是多个单独插入
    INSERT INTO table_name (column1, column2) VALUES ('value1', 'value2'), ('value3', 'value4');
    

14. 避免大量数据一次性删除
    
    -- 分批删除大量数据以避免锁定表
    DELETE FROM table_name WHERE condition LIMIT 1000;
    -- 循环直到删除完毕
    

15. 优化LIKE查询
    
    -- 当必须使用LIKE时,避免以通配符开始的模式
    SELECT * FROM table_name WHERE column_name LIKE 'value%';
    

16. 使用固定长度的数据类型
    
    -- 使用CHAR代替VARCHAR对于固定长度的数据
    CREATE TABLE new_table (
      column1 CHAR(10),
      column2 INT
    );
    

17. 避免数据类型转换
    
    -- 避免在查询中进行数据类型转换
    SELECT * FROM table_name WHERE integer_column = 123;
    -- 而不是
    SELECT * FROM table_name WHERE CAST(varchar_column AS INT) = 123;
    

18. 利用并行处理
    
    -- 在支持并行处理的数据库中,确保查询能够并行执行
    SELECT * FROM table_name WHERE column1 = 'value' AND column2 = 'value';
    

19. 减少数据冗余和重复
    
    -- 通过正规化设计减少数据重复
    SELECT DISTINCT column_name FROM table_name;
    

20. 调整数据库缓存设置
    
    -- 根据工作负载调整数据库缓存,以提高读取性能
    -- 注意:具体操作依赖于数据库系统,需查阅相关文档
    

21. 优化统计函数的使用
    
    -- 对需要频繁计算的统计值使用物化视图或计算字段
    SELECT SUM(column_name) FROM table_name;
    

22. 避免非必要的JOIN操作
    
    -- 仅当必要时才进行JOIN,考虑是否可以通过其他方式获取数据
    SELECT a.column1, b.column2 FROM table_a a JOIN table_b b ON a.id = b.a_id;
    

23. 使用数据库特定功能
    
    -- 利用数据库提供的特定功能和扩展,如全文搜索
    SELECT * FROM table_name WHERE MATCH(column_name) AGAINST ('value');
    

24. 减少事务的大小
    
    -- 分批次提交大事务,减少锁定资源的时间
    BEGIN TRANSACTION;
    -- 执行部分更新
    COMMIT;
    

25. 合理安排计划任务和维护操作
    
    -- 避免在高峰时段执行大规模的数据维护操作
    -- 安排在低峰时段进行
    

这些优化技巧涵盖了从查询优化、索引策略到数据库配置等多个方面。实现优化是一个持续的过程,需要根据应用的实际情况不断调整和优化。

常用脚本操作

-- 1、插入数据
INSERT INTO example_table (name, age) VALUES ('Alice', 30);

-- 2、查询表中所有数据
SELECT * FROM example_table;

-- 3、使用 LIMIT 限制结果数量
SELECT * FROM example_table LIMIT 10;

-- 4、按条件筛选数据
SELECT * FROM example_table WHERE age > 25;

-- 5、更新数据
UPDATE example_table SET age = 35 WHERE name = 'Alice';

-- 6、删除数据
DELETE FROM example_table WHERE id = 5;

-- 7、排序结果
SELECT * FROM example_table ORDER BY age DESC;

-- 8、计算行数
SELECT COUNT(*) FROM example_table;

-- 9、求和
SELECT SUM(age) FROM example_table;

-- 10、连接表
SELECT a.id, a.name, b.age
FROM table1 a
JOIN table2 b ON a.id = b.id;

-- 11、使用别名
SELECT name AS full_name FROM example_table;

-- 12、使用通配符进行模糊查询
SELECT * FROM example_table WHERE name LIKE 'A%';

-- 13、使用 GROUP BY 分组数据
SELECT age, COUNT(*) FROM example_table GROUP BY age;

-- 14、使用 HAVING 进一步筛选分组数据
SELECT age, COUNT(*) FROM example_table
GROUP BY age
HAVING COUNT(*) > 1;

-- 15、使用子查询
SELECT * FROM example_table
WHERE age IN 
(SELECT age FROM other_table);

-- 16、使用 CASE 表达式进行条件操作
SELECT name,
CASE WHEN age > 30 
     THEN 'Old' ELSE 'Young' 
END AS age_group
FROM example_table;

-- 17、使用 JOIN 进行不同类型的连接
SELECT a.id, a.name, b.age
FROM table1 a
LEFT JOIN table2 b
ON a.id = b.id;

-- 18、创建索引以加快查询速度
CREATE INDEX idx_name ON example_table(name);

-- 19、优化查询性能
EXPLAIN SELECT * FROM example_table WHERE age > 25;

-- 20、备份数据库
mysqldump -u username -p database_name > backup.sql;

-- 21、使用 DISTINCT 去除重复行
SELECT DISTINCT name FROM example_table;

-- 22、使用 BETWEEN 进行范围查询
SELECT * FROM example_table
WHERE age BETWEEN 20 AND 30;

-- 23、使用 UPDATE 和 JOIN 更新关联表
UPDATE example_table a
JOIN other_table b ON a.id = b.id
SET a.age = b.age;

-- 24、使用 JOIN 和 COUNT 计算关联表中的记录数
SELECT a.id, COUNT(b.id) as count 
FROM table1 a
LEFT JOIN table2 b ON a.id = b.id
GROUP BY a.id;

-- 25、使用 LIMIT 和 OFFSET 实现分页功能
SELECT * FROM example_table
LIMIT 10 OFFSET 20;

-- 26、使用 IFNULL 处理空值
SELECT name, IFNULL(age, 'Unknown') FROM example_table;

-- 27、将查询结果导出为CSV文件
SELECT order_id, product_name, quantity
INTO OUTFILE '/var/lib/mysql-files/orders.csv'
FIELDS TERMINATED BY ','
ENCLOSED BY '"'
LINES TERMINATED BY '\n'
FROM example_table;

-- 28、批量插入数据
INSERT INTO example_table (name, age)
VALUES ('Alice', 30), ('Bob', 25), ('Charlie', 35);

-- 29、使用 TRUNCATE 快速清空表数据
TRUNCATE TABLE example_table;

-- 30、使用 ROLLBACK 撤销未提交的更改
ROLLBACK;

-- 31、使用 UNION 合并多个查询的结果集并去重:
SELECT name FROM table1
UNION
SELECT name FROM table2;

-- 32、使用 CAST 或 CONVERT 转换数据类型:
SELECT CAST(age AS CHAR) FROM example_table;

-- 33、计算每个分组内的行的排名
SELECT name, age,
       RANK() OVER (PARTITION BY age ORDER BY name) as age_rank
FROM example_table;

-- 34、使用 SHOW CREATE TABLE 查看表结构
SHOW CREATE TABLE example_table;

-- 35、删除表中的重复行
DELETE n1
FROM example_table n1, example_table n2
WHERE n1.id > n2.id AND n1.name = n2.name;

-- 36、将查询结果作为表进行使用
SELECT * FROM 
(SELECT name FROM example_table) AS subquery_table;

-- 37、使用 LOAD DATA INFILE 导入数据到表格中:
LOAD DATA INFILE 'data.csv' 
INTO TABLE example_table
FIELDS TERMINATED BY ',' 
LINES TERMINATED BY '\n';

-- 38、在查询中使用正则表达式
SELECT * FROM example_table
WHERE name REGEXP '^A.*';

-- 39、使用 EXISTS 进行子查询检查
SELECT * FROM table1
WHERE EXISTS 
(SELECT 1 FROM table2
WHERE table1.id = table2.id);

-- 40、设置自动增量值的起始点
ALTER TABLE example_table AUTO_INCREMENT = 100;

-- 41、使用 CONCAT 合并列数据
SELECT CONCAT(name, ' is ', age, ' years old') AS description
FROM example_table;

-- 42、查找表中的最大值和最小值
SELECT MAX(age) AS max_age,
MIN(age) AS min_age
FROM example_table;

-- 43、在查询结果中使用变量
SET @row_number = 0;
SELECT (@row_number:=@row_number+1) AS row_num,
name 
FROM example_table;

-- 44、显示当前数据库中的所有表
SHOW TABLES;

-- 45、使用SHOW VARIABLES查看 MySQL 的配置变量:
SHOW VARIABLES LIKE 'version%';

-- 46、创建临时表并插入数据
CREATE TEMPORARY TABLE temp_table AS 
SELECT id, name FROM example_table
WHERE age > 30;

-- 47、修改表结构,添加新列
ALTER TABLE example_table
ADD COLUMN email VARCHAR(50);

-- 48、使用 GROUP_CONCAT 将多行值合并为单个字符串
SELECT id, GROUP_CONCAT(name) AS all_names
FROM example_table GROUP BY id;

-- 49、使用 TRIGGER 实现对表的操作触发器
CREATE TRIGGER example_trigger
BEFORE INSERT ON example_table
FOR EACH ROW 
SET NEW.age = NEW.age + 1
;

-- 50、监控数据库性能
SHOW PROCESSLIST;

AIGC ChatGPT 职场案例
AI 绘画 与 短视频制作
PowerBI 商业智能 68集
Mysql 8.0  54集
Oracle 21C 142集
Office 2021实战应用
Python 数据分析实战,
ETL Informatica 数据仓库案例实战 51集
Excel 2021实操 100集,
Excel 2021函数大全 80集
Excel 2021高级图表应用 89集,
Excel 2021大屏可视化制作 56集
Excel 2021实用技巧 300集
PPT 2021 商业汇报实战应用 69集
Tableau  数据分析 80集
FineReport 帆软大屏可视化 50集

送你各类文档模板PPT,表格,大屏可视化 超过5000+模板

以上案例实战获取:  https://edu.csdn.net/combo/detail/2552

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

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

相关文章

JAVA基础08- 继承,重写,super以及this

目录 继承(extends) 定义 说明 作用 方法的重写 定义 重写关键点 方法重写与重载的区别 练习 练习1(方法继承与重写的简单练习) 练习2(方法继承与重写的进阶练习) This的使用 定义 作用以及注…

基于SpringBoot+Vue的IT技术交流平台(源码+文档+包运行)

一.系统概述 我国科学技术的不断发展,计算机的应用日渐成熟,其强大的功能给人们留下深刻的印象,它已经应用到了人类社会的各个层次的领域,发挥着重要的不可替换的作用。信息管理作为计算机应用的一部分,使用计算机进行…

leetcode-分割链表

题目 面试题 02.04. 分割链表 提示 给你一个链表的头节点 head 和一个特定值 x ,请你对链表进行分隔,使得所有 小于 x 的节点都出现在 大于或等于 x 的节点之前。 你不需要 保留 每个分区中各节点的初始相对位置。 示例 1: 输入&#xff…

搜维尔科技:【工业仿真】煤矿安全知识基础学习VR系统

产品概述 煤矿安全知识基础学习VR系统 系统内容: 煤矿安全知识基础学习VR系统内容包括:下井流程(正确乘坐罐笼、班前会、井下行走注意事项、工作服穿戴、入井检身及人员清点、下井前准备工作、提升运输安全);运煤流程…

SpringBoot集成RockerMQ

1.引入依赖 <dependency><groupId>org.apache.rocketmq</groupId><artifactId>rocketmq-spring-boot-starter</artifactId><version>2.2.0</version> </dependency>2.配置服务器地址 #Rocketmq配置 rocketmq.name-server192…

专业清洁工匠服务网站模板 html网站

目录 一.前言 二.页面展示 三.下载链接 一.前言 该HTML代码生成了一个网页&#xff0c;包括以下内容&#xff1a; 头部信息&#xff1a;指定了网页的基本设置和元数据&#xff0c;例如字符编码、视口大小等。CSS文件&#xff1a;引入了多个CSS文件&#xff0c;用于设置网页…

EI级 | Matlab实现VMD-TCN-LSTM-MATT变分模态分解卷积长短期记忆神经网多头注意力多变量时间序列预测

EI级 | Matlab实现VMD-TCN-LSTM-MATT变分模态分解卷积长短期记忆神经网多头注意力多变量时间序列预测 目录 EI级 | Matlab实现VMD-TCN-LSTM-MATT变分模态分解卷积长短期记忆神经网多头注意力多变量时间序列预测预测效果基本介绍程序设计参考资料 预测效果 基本介绍 1.Matlab实…

动手写sql 《牛客网80道sql》

第1章&#xff1a;SQL编写基础逻辑和常见问题 基础逻辑 SELECT语句: 选择数据表中的列。FROM语句: 指定查询将要从哪个表中检索数据。WHERE语句: 过滤条件&#xff0c;用于提取满足特定条件的记录。GROUP BY语句: 对结果进行分组。HAVING语句: 对分组后的结果进行条件过滤。O…

【STM32】嵌入式实验二 GPIO 实验 (前三个设计)

1&#xff0e; 按键亮灯 设计 GPIO 实验项目 1&#xff0c;功能&#xff1a;当按键 KB1 按下时&#xff0c;实验板上全彩发光二极管周边 的发光二极管全亮&#xff0c;当按键 KB2 按下时跑马灯 D0 闪亮。 实验要求基于寄存器的GPIO配置&#xff0c;所以需要手动操作寄存器来配…

联想小新Air14-2019锐龙版更换硬盘

首先打下D面所有螺丝&#xff08;内六角螺丝&#xff0c;需要准备螺丝刀&#xff09;&#xff0c;然后从下方翘起整个D面打开如下图 原装为2280长度的海力士硬盘&#xff0c;有空余的2242长度硬盘位 更换前断电&#xff0c;建议拆下电池&#xff08;扣下电池排线后不好安装&am…

每日OJ题_完全背包④_力扣279. 完全平方数(一维和二维)

目录 力扣279. 完全平方数 问题解析 解析代码 优化代码&#xff08;相同子问题分析和滚动数组&#xff09; 力扣279. 完全平方数 279. 完全平方数 难度 中等 给你一个整数 n &#xff0c;返回 和为 n 的完全平方数的最少数量 。 完全平方数 是一个整数&#xff0c;其值…

百科不全书之 docker记录

docker记录 1 参考文件2. Docker简介与虚拟机的区别 1 参考文件 参考视频&#xff1a;B站【GeekHour】30分钟Docker入门教程: link 2. Docker简介 Docker是一个用于构建运行 传送 应用程序的平台。 与虚拟机的区别 虚拟机使用了一种叫做虚拟化的技术。每台虚拟机需要占…

固定测斜仪:工程观测的精密利器

在工程观测测量领域&#xff0c;固定测斜仪扮演着至关重要的角色。固定测斜仪&#xff0c;凭借其耐冲击型倾斜传感器、出色的可靠性、快速稳定的特点&#xff0c;以及简洁的安装和智能识别功能&#xff0c;已成为行业内重要工具。其输出信号为RS485数字量&#xff0c;可直接显示…

使用electron打包vuecli创建的项目

下面是我打包的时候才过的所有的坑&#x1f4a3;&#xff1a; 首先创建一个vue2的空项目&#xff0c;如果全局安装的vue-cli版本太低&#xff0c;低于3就无法使用vue create命令&#xff0c;必须使用uninstall将之前的卸载掉&#xff0c;在重现安装&#xff0c;之后的就是最近…

握手问题(蓝桥杯)

文章目录 握手问题【问题描述】答案&#xff1a;1204解题思路模拟 握手问题 【问题描述】 小蓝组织了一场算法交流会议&#xff0c;总共有 50 人参加了本次会议。在会议上&#xff0c;大家进行了握手交流。按照惯例他们每个人都要与除自己以外的其他所有人进行一次握手&#…

Scrapy框架内存泄漏问题及解决

说明&#xff1a;仅供学习使用&#xff0c;请勿用于非法用途&#xff0c;若有侵权&#xff0c;请联系博主删除 作者&#xff1a;zhu6201976 一、问题背景及原因 官方文档&#xff1a;Debugging memory leaks — Scrapy 2.11.1 documentation Scrapy是一款功能强大的网络爬虫框…

SpringMVC 常用注解介绍

Spring MVC 常用注解介绍 文章目录 Spring MVC 常用注解介绍准备1. RequestMapping1.1 介绍2.2 注解使用 2. 请求参数2.1 传递单个参数2.2 传递多个参数2.3 传递对象2.4 传递数组 3. RequestParam3.1 注解使用3.2 传入集合 4. RequestBody5. PathVariable6. RequestPart7. Rest…

k8s使用harbor私有仓库镜像 —— 筑梦之路

官方文档: Secret | Kubernetes ImagePullSecrets的设置是kubernetes机制的另一亮点&#xff0c;习惯于直接使用Docker Pull来拉取公共镜像&#xff0c;但非所有容器镜像都是公开的。此外&#xff0c;并不是所有的镜像仓库都允许匿名拉取&#xff0c;也就是说需要身份认证&…

23 种设计模式

设计模式 1、工厂方法 消费者任何时候需要某种产品,只需向工厂请求即可。消费者无须修改就可以接纳新产品。缺点是当产品修改时,工厂类也要做相应的修改。如:如何创建及如何向客户端提供。 2、建造者模式 建造模式:将产品的内部表象和产品的生成过程分割开来,从而使一…

【electron3】electron将数据写入本地数据库

安装 yarn add sqlite3 --save连接并调用数据库&#xff0c;创建表 createDB.ts文件内容 const sqlite3 require(sqlite3) const NODE_ENV process.env.NODE_ENV const path require(path) const { app } require(electron) let DB_PATH path.join(app.getAppPath(), /…