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.mfbz.cn/a/553442.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【面试经典 150 | 链表】分隔链表

文章目录 写在前面Tag题目来源解题思路方法一:模拟 写在最后 写在前面 本专栏专注于分析与讲解【面试经典150】算法,两到三天更新一篇文章,欢迎催更…… 专栏内容以分析题目为主,并附带一些对于本题涉及到的数据结构等内容进行回顾…

关于macOS 10.13-10.15系统安装教程

关于macOS 10.13-10.15系统安装教程 1、关机状态按完电源键,或重启黑屏后,按住option键不放,直到进入启动菜单; 2、选择启动U盘,开始跑进度条,跑完后进入如下界面: 安装界面语言选择&#xff0c…

Github 2024-04-18 Go开源项目日报Top10

根据Github Trendings的统计,今日(2024-04-18统计)共有10个项目上榜。根据开发语言中项目的数量,汇总情况如下: 开发语言项目数量Go项目10Vue项目1TypeScript项目1Ollama: 本地大型语言模型设置与运行 创建周期:248 天开发语言:Go协议类型:MIT LicenseStar数量:42421 个…

数据库主从备份

1、简介 数据库运⾏时,⼀些因素可能会导致服务运⾏不正常,⽤户访问数据受阻。对于互联⽹公 司,尤其是购物⽹站⽽⾔,这种情况造成的损失是⽆法估量的。因此,对数据库进⾏“备份” 也是必不可少的操作。当主要的数据库死…

HX711压力传感器学习一(STM32)

目录 原理图:​ 引脚介绍: HX711介绍工作原理: 程序讲解: 整套工程: 发送的代码工程,与博客的不一致,如果编译有报错请按照报错和博客进行修改 原理图: 引脚介绍: VCC和GND引…

数字孪生模型降价技术

前言: 数字经济是继农业经济、工业经济之后,随着信息技术革命发展而产生的一种新的经济形态,大力发展数字经济已经成为国家实施大数据战略、主推经济高质量发展的重要抓手,而数字孪生则是助力数字经济与实体经济融合发展的一种重…

局域网MongoDB的数据库访问不了

局域网MongoDB的数据库访问不了 确认bindIp: 0.0.0.0后,仍然是访问不了,查询资料发现是windows自带防火墙的问题 进入到 允许其他应用,选择mongod.exe的位置 这样就好了。

CSS 01

CSS层叠样式表 HTML的局限性 HTML只关注内容的语义,可以做简单的样式,却带来了无限的臃肿和繁琐。 CSS CSS是层叠样式表的简称,也被称之为CSS样式表或级联样式表。CSS也是一种标记语言。   CSS主要用于设置HTML页面中的文本内容(字体、大…

基于SpringBoot框架的“智慧食堂”

采用技术 基于SpringBoot框架的“智慧食堂”系统的设计与实现~ 开发语言:Java 数据库:MySQL 技术:SpringBootMyBatis 工具:IDEA/Ecilpse、Navicat、Maven 页面展示效果 系统功能 系统首页 用户注册页面 菜品信息页面 个人…

【R语言】混合图:小提琴图+箱线图

{ggstatsplot} 是 {ggplot2} 包的扩展,用于创建图形,其中包含信息丰富的绘图本身中包含的统计测试的详细信息。在典型的探索性数据分析工作流程中,数据可视化和统计建模是两个不同的阶段:可视化通知建模,而建模又可以建…

嵌入式学习56-ARM5(linux驱动启动程序)

知识零碎: bootm: 启动内核同时给内核传参 …

电能质量检测仪

TH-6500随着电力系统的快速发展和智能化水平的提高,电能质量问题越来越受到人们的关注。电能质量检测仪作为一种关键设备,能够实时监测电能质量,为电力系统的稳定运行提供有力保障。 一、电能质量检测仪概述 电能质量检测仪是一种用于监测和…

怎样将excel的科学计数法设置为指数形式?

对了,这个问题中所谓的“指数形式”是指数学上书写的右上标的指数格式,能不能通过单元格设置来做这个格式的转换呢? 一、几个尝试 以下,以数字123000为例来说明。 情况1.转换成数学上的书写方式,如下图的样子&#x…

象棋教学辅助软件介绍

背景 各大象棋软件厂商都有丰富的题目提供训练,但是其AI辅助要么太弱,要么要付费解锁,非常不适合我们这些没有赞助的业余棋手自行训练,于是我需要对其进行视觉识别,和AI训练,通过开启这个辅助软件&#xf…

Linux安装和使用Android Debug Bridge(ADB)

目录 1、开发环境和工具 2、ADB是什么? 3、安装ADB 3.1、使用包管理器安装 ADB 3.2、手动安装 ADB 4、使用ADB 4.1、连接设备 4.2、执行shell命令 4.3、安装应用程序 4.4、截取屏幕截图 4.5、模拟按键和手势 4.6、上传文件到Android设备 4.7、从Android设备下载文件…

Chrome修改主题颜色

注意:自定义Chrome按钮只在搜索引擎为Google的时候出现。

2024年五一杯数学建模C题思路分析

文章目录 1 赛题思路2 比赛日期和时间3 组织机构4 建模常见问题类型4.1 分类问题4.2 优化问题4.3 预测问题4.4 评价问题 5 建模资料 1 赛题思路 (赛题出来以后第一时间在CSDN分享) https://blog.csdn.net/dc_sinor?typeblog 2 比赛日期和时间 报名截止时间:2024…

Civil3D 2024安装包(亲测可用)

目录 一、软件简介 二、软件下载 一、软件简介 Civil3D软件是一款专为土木工程设计与文档编制而打造的建筑信息模型(BIM)解决方案。它结合了AutoCAD的熟悉环境,并进行了专业定制,以满足土木工程道路与土石方解决的需求。Civil3D能…

HTML5漫画风格个人介绍源码

源码介绍 HTML5漫画风格个人介绍源码,源码由HTMLCSSJS组成,记事本打开源码文件可以进行内容文字之类的修改,双击html文件可以本地运行效果,也可以上传到服务器里面,重定向这个界面 效果截图 源码下载 HTML5漫画风格…

Java设计模式——代理模式

静态代理: Java静态代理是设计模式中的一种,它通过创建一个代理类来代替原始类,从而提供额外的功能或控制原始类的访问。 如何使用Java静态代理 要创建一个静态代理,你需要有一个接口,一个实现该接口的目标类&#…
最新文章