sql优化提速整理

SQL Server性能优化核武器库:从慢如蜗牛到闪电侠的10倍提速秘籍! 集合优快云万赞实战技巧,从底层原理到黑箱操作,附可直接运行的T-SQL代码,让数据库飞起来!**覆盖索引终结SELECT *** 阅读详情

sql优化提速整理

场景描述

在我们实际开发中,随着业务的不断增加,数据量也在不断的攀升,这样就离不开一个问题:数据查询效率优化
根据自己的以往实际项目工作经验和学习所知,现在对SQL查询优化做一个简单的梳理总结,总结的不好之处,望多多指点交流学习
主要通过以下几个点来进行总结分析:索引、语句本身、分区存储、分库分表

索引

   在实际工作中,sql优化第一想到的应该就是索引,因为添加索引能够很直观的提升查询效率,但是在添加索引的时也不是越多多好,下面简单总结一下索引的实际使用

  索引简介

   关于索引的定义,在此不详细说明,网上的资料很多。索引简单的理解就是数据的目录,就好比一个字典的目录,其目的是提高查询效率

  索引分类

    SQL索引根据存储关系,分为两类:聚合索引和非聚合索引

  聚集索引和非聚集索引的根本区别是表记录的排列顺序和与索引的排列顺序是否一致,聚合索引的索引排序与表记录的排序是一致的,非聚合索引正好相反。
  在一个表中,只会存在一个聚合索引,主键默认就是聚合索引,聚合索引的关键词为:clustered
  创建聚合索引的SQL语句:

  ---- 根据数据表的字段1、字段2创建一个组合的聚合索引
  use 库名
  create clustered index 索引名称 on 表名(字段1,字段2)

  SQL索引根据使用关系,分为四类:主键索引、唯一索引、普通索引(组合索引)、全文索引
  主键索引:
  表的主键自动为主键索引,每条数据的唯一标识,一个表只有一个主键索引
  唯一索引:
  唯一索引也是确保数据的唯一性,一个表可以多有多个唯一索引,这也是和主键索引的区别所在
  创建唯一索引sql语句:  

create UNIQUE index 索引名称 on 表名(字段1,字段2)

  普通索引:
  普通索引可以对任意字段或者多个字段添加索引

  

----创建普通索引sql语句:
  create index 索引名称 on 表名(字段1,字段2) 

  索引创建技巧

动作描述

使用聚集索引 

 使用非聚集索引

 外键列

 应

 应

 主键列

 应

 应

 列经常被分组排序(order by)

 应

 应

 返回某范围内的数据

 应

 不应

 小数目的不同值

 应

 不应

 大数目的不同值

 不应

 应

 频繁更新的列

不应 

 应

 频繁修改索引列

 不应

 应

 一个或极少不同值

 不应

 不应

  建立索引的原则

  • 定义主键的数据列一定要建立索引。
  • 定义有外键的数据列一定要建立索引。
  • 对于经常查询的数据列最好建立索引。
  • 对于需要在指定范围内的快速或频繁查询的数据列;
  • 经常用在WHERE子句中的数据列。
  • 经常出现在关键字order by、group by、distinct后面的字段,建立索引。如果建立的是复合索引,索引的字段顺序要和这些关键字后面的字段顺序一致,否则索引不会被使用。
  • 对于那些查询中很少涉及的列,重复值比较多的列不要建立索引。
  • 对于定义为text、image和bit的数据类型的列不要建立索引。
  • 对于经常存取的列避免建立索引
  • 限制表上的索引数目。对一个存在大量更新操作的表,所建索引的数目一般不要超过3个,最多不要超过5个。索引虽说提高了访问速度,但太多索引会影响数据的更新操作。
  • 对复合索引,按照字段在查询条件中出现的频度建立索引。在复合索引中,记录首先按照第一个字段排序。对于在第一个字段上取值相同的记录,系统再按照第二个字段的取值排序,以此类推。因此只有复合索引的第一个字段出现在查询条件中,该索引才可能被使用,因此将应用频度高的字段,放置在复合索引的前面,会使系统最大可能地使用此索引,发挥索引的作用。

  索引碎片化处理(重构索引)

   关于索引的定义,在此不详细说明,网上的资料很多。索引简单的理解就是数据的目录,就好比一个字典的目录,其目的是提高查询效率

  索引简介

   在实际开发中,有时候会发现新增了索引,但是效率还是没有明显提升,这时候需要考虑是否由于数据的更新编辑产生了索引碎片化,并处理

  如果检查是否有索引碎片:

---- 检查一个表索引碎片化        
  use 库名
    DBCC ShowContig(待查询的表)


---- 执行结果实例:
DBCC SHOWCONTIG 正在扫描 'SYS_Confige' 表... 表: 'SYS_Confige' (37575172);索引 ID: 1, 数据库 ID: 7 已执行 TABLE 级别的扫描。 - 扫描页数................................: 7885 - 扫描区数..............................: 986 - 区切换次数..............................: 985 - 每个区的平均页数........................: 8.0 - 扫描密度 [最佳计数:实际计数].......: 100.00% [986:986] - 逻辑扫描碎片 ..................: 0.01% - 区扫描碎片 ..................: 1.12% - 每页的平均可用字节数.....................: 23.0 - 平均页密度(满).....................: 99.72% DBCC 执行完毕。如果 DBCC 输出了错误信息,请与系统管理员联系。

----数据结构分析:处理

  Logical Scan Fragmentation-逻辑扫描碎片:无序页的百分比。该百分比应该在0%到10%之间,高了则说明有外部碎片。

  解决方式:
  解决方式有两种方式:整理索引碎片、重建索引,在实际操过程中建议采用:重建索引。
  重建索引的SQL语句:
  use 库名
  DBCC DBREINDEX(待重建索引的表名称)

查询语句优化

  在处理好索引后,接下来就是分析查询语句,查询语句可以借助专业的分析工具来分析,一个好的语句和不好的语句也会很影响效率,现在简单总结一下在查询语句的优化方向:

  1、查询字段禁止出现 selete * 

2、where 及 order by 涉及的列上建立索引。

  3、where避免出现非空判断:比如:select from table where num is null
    此时可以给num赋一个默认值0,语句修改为:select from table where num=0
  4、应尽量避免在 where 子句中使用!=或<>操作符,否则将引擎放弃使用索引而进行全表扫描
  5、应尽量避免在 where 子句中使用 or 来连接条件,否则将导致引擎放弃使用索引而进行全表扫描,如:
    -----查询value值为1 或者 4 的数据集合
    select Id from SYS_Confige where Value=1 or Value=4

    ---- 可以这样查询:
    select * from SYS_Confige where Value=1
    union all
    select * from SYS_Confige where Value=4
  6、in 和 not in 也要慎用,否则会导致全表扫描,如:
    select id from SYS_Configet where Value in(1,2,3)
    对于连续的数值,能用 between 就不要用 in 了:
    select id from SYS_Configet where num Value 1 and 3
  7、查询时避免使用like '%待查询关键字%' 查询
  8、在使用索引字段作为条件时,如果该索引是复合索引,那么必须使用到该索引中的第一个字段作为条件时才能保证系统使用该索引,
  否则该索引将不会被使用,并且应尽可能的让字段顺序与索引顺序相一致
  9、能够用关联查询的不要用exists
  10、避免频繁创建和删除临时表,以减少系统表资源的消耗。
  11、尽量避免向客户端返回大数据量,若数据量过大,应该考虑相应需求是否合理

分区存储

  当单表的数量达到一定量时,为了提高查询效率,数据表分区存储也是一个不错的优化方案。
  分区呢就是把一张表的数据分成N多个区块,这些区块可以在同一个磁盘上,也可以在不同的磁盘上,通过提高减少文件大小,提高IO处理效率,间接的提高查询效率
  分区存储,只是在数据存储上采用分区,但是在表现上还是一张表。

  表分区有以下优点:
    1、改善查询性能:对分区对象的查询可以仅搜索自己关心的分区,提高检索速度。
    2、增强可用性:如果表的某个分区出现故障,表在其他分区的数据仍然可用;
    3、维护方便:如果表的某个分区出现故障,需要修复数据,只修复该分区即可;
    4、均衡I/O:可以把不同的分区映射到磁盘以平衡I/O,改善整个系统性能。
  缺点:
  分区表相关:已经存在的表没有方法可以直接转化为分区表

分库分表

  分库分表其实原理也是将一个大表拆分不同的小表,在拆分上有两种拆分方式:
  横向拆分:主要针对一个表的字段比较多,可以根据字段的查询频率、更新频率进行分割存储,可以理解为表扩展
  纵向拆分:纵向拆分主要是根据数据量,将数据存储在不同的表,常用的拆分方式有:按照时间、按照哈希等等
  分库分表和分区存储两者看上去是有点矛盾,实际上两者的出发点不一样。分区:是降低大单表数据分区存储,分库分表:直接将单表拆分为多表

  同时分库分表不仅仅会增加数据维护难度,同时也会需要投入大量的开发工作,所以分库分表一般是要系统有一定的规模,公司有一定的资源支持
  分库分表两种可以配合使用,比如在分表后,还可以对表进行分区存储。

总结

  在数据优化过程中,索引是第一出发点,语句优化必不可少,分区、分库、分表也得考虑。

嵌入式C开发必备:用Cursor规则搞定代码风格检查(附Pikachu项目实战) 本文以Pikachu开源项目为例,详细介绍了如何利用Cursor的AI代理规则系统,为嵌入式C开发项目配置一套完整的代码风格检查与规范执行方案。通过实战演示,指导开发者创建项目级规则,实现命名、格式、硬件抽象层及驱动开发的自动化规范,从而提升代码一致性、可维护性和团队协作效率。 阅读详情

相关推荐

2016域控服务器迁移,WIN Server2016 域服务器迁移出错

各位大神: 这几天刚安装了一台windows server 2016做域迁移时出现错误:1、默认SYSLOG、NETLOGON共享文件重启后自动取消共享,即使手动打开后依然会出现自动取消2、组策略中编辑策略时出现以下报错 policys.png (19.29 KB)2017-2-7 13:52操作此动作之前可以访问本机的共享(NETLOGON)3、使用DCDIAG检测多个报错:C:\Use...

weixin_31833039的博客 3314

SqlServer 处理百万级以上的数据如何提高查询速度

应尽量避免在 where 子句中使用!= 或 <> 操作符,否则将引擎放弃使用索引而进行全表扫描。 对查询进行优化,应尽量避免全表扫描,首先应考虑在 where 及 order by 涉及的列上建立索引。 应尽量避免在 where 子句中对字段进行 null 值判断,否则将导致引擎放弃使用索引而进行全表扫描,如: select id from t where num is null 可以在 num 上设置默认值 0,确保表中 num 列没有 null 值,然后这样查询: select..

random-s的博客 6985

深入了解神经网络:构建人工智能的基石

这篇博客将为您解释神经网络的构造,让您能够理解这个令人着迷的领域的基本工作原理。神经网络是人工智能领域的关键技术,它们的构造基于神经元的灵感,并结合了数学、统计和机器学习的原理。输入可以类比为神经元的树突,而输出可以类比为神经元的轴突,计算则可以类比为细胞核。较好的方法就是预先设定几个可选值,通过切换这几个值来看整个模型的预测效果,选择效果最好的值作为最终选择。:这是神经网络的核心部分,包含多个层次的神经元。、神经网络结构图中的拓扑与箭头代表着预测过程时数据的流向,跟训练时的数据流有一定的区别;

AI_dataloads的博客 2万+

SQL Server索引优化指南:让数据库查询快如闪电(通俗易懂版)

作为开发者和DBA,你是否经常遇到数据库查询变慢的情况?明明服务器配置不差,SQL语句也看似合理,但响应时间就是让人抓狂。今天我们就来聊聊SQL Server的索引优化——这个让数据库查询提速10倍的核心技能!

WL456258的博客 1813

机器人视觉实战:用OpenCV搞定手眼标定(附完整C++代码)

本文详细介绍了使用OpenCV实现机器人视觉中的手眼标定技术,包括核心算法、工业场景优化及完整C++代码示例。通过解析坐标系转换问题,提供从数据采集到标定验证的全流程解决方案,帮助开发者在复杂工业环境中实现高精度机械臂与视觉系统的协同作业。

weixin_29306571的博客 482

慢SQL优化实战:我用这5招让查询速度提升100倍!(真实案例)

查(检查执行计划)切(分析等待类型)验(验证优化效果)记住:优化是持续的过程,不是一劳永逸的!最近在优化一个分页查询时,通过延迟关联+覆盖索引的组合拳,把原本8秒的查询降到了0.2秒,这种成就感真的比中彩票还爽!数据库不会说谎,EXPLAIN说明一切。当你束手无策时,回到执行计划,总能找到突破口!

kernelcraft的博客 2895

ruoyi-nbcio-plus基于vue3的flowable服务任务的升级修改

ruoyi-nbcio-plus基于vue3的flowable服务任务的升级修改

宁波阿成的博客 847

性能优化---替代not in

虽然现在计算机硬件及网络设备都比以前大大提高,但查询优化也是我们要追求的,尤其在大的庞大的数据量下。 在sql查询中,not in 需要全集检索,很影响性能。 为了提高查询性能,我们可以用 连接 替代not in 如下: select a,b,c from A where a not in (select a from B); 可以替换为 select a,

ytc的专栏 1688

化工管道设计软件:CAESAR II二次开发_(6).API接口与函数库

自定义函数库是开发者根据特定需求编写的函数集合。这些函数可以扩展CAESAR II的功能,实现更复杂的管道设计任务。自定义函数库通常需要开发者具备一定的编程基础,能够理解和编写与CAESAR II接口兼容的代码。定义函数:在Python或其他编程语言中定义所需的函数。注册函数:将自定义函数注册到CAESAR II的函数库中。调用函数:在CAESAR II中调用自定义函数,实现特定功能。假设我们需要创建一个自定义函数库,用于批量修改管道节点的坐标。定义函数:在Python中定义一个函数,用于批量修改节点坐标。

kkchenjj的博客 1734

Python爬虫反爬:突破Cloudflare 5秒盾(免费方案,小红书/知乎可用)

这套方案的核心优势是“真实模拟+免费无门槛”无需付费代理、无需复杂JS解密,仅用playwright模拟真实浏览器,即可突破Cloudflare 5秒盾;适配小红书、知乎、豆瓣等主流平台,修改配置即可复用;兼顾易用性和稳定性,新手也能快速上手,企业级场景可通过IP轮换、异步爬取进一步优化。“模拟人类行为到底”——Cloudflare的反爬本质是区分“机器”和“人类”,只要爬虫的浏览器指纹、行为特征与人类一致,就能稳定绕过限制。

专注于Python爬虫开发,分享爬虫技巧、项目实战与反爬经验,使用Scrapy、BeautifulSoup等工具,解决数据抓取难题。 2881

整理SQL索引碎片提速

整理SQL索引碎片提速2007年07月15日 星期日 下午 03:20检查索引碎片DBCC SHOWCONTIG(表)逻辑扫描碎片和扩展盘区扫描碎片都非常大,需要对索引碎片进行处理一般有两种方法解决,一是利用DBCC INDEXDEFRAG整理索引碎片,二是利用DBCC DBREINDEX重建索引。二者各有优缺点。调用微软的原话如下:DBCC INDEXDEFRAG 命令是联机操作,所以索引只有在...

weixin_30872733的博客 85

2、机器人控制技术:阻抗/导纳控制与强化学习的融合

本文探讨了阻抗/导纳控制与强化学习在机器人控制中的融合应用。阻抗/导纳控制广泛应用于外骨骼和跟踪控制,通过改进方案提升建模误差下的鲁棒性;强化学习则为解决维度灾难、实现最优交互提供了有效途径,尤其在大输入空间、连续时间系统、冗余机器人及鲁棒控制中表现突出。结合近似器与合理奖励设计,强化学习可在无模型情况下实现高效控制。未来,两者融合有望推动更智能、更安全的机器人系统发展。

ice55的博客 300

DataWarehouse优化清单:HiveSQL优化案例与SQL规范——慢SQL提速5倍的实战技巧

DataWarehouse 是一份从数仓建设到数据应用的开源学习资料,其调优目录沉淀了 **HiveSQL 优化案例** 与 **SQL 规范** 两大核心内容。本文把慢 SQL 调优整理成一份可落地的清单:先用 explain 看执行计划定位瓶颈,再用临时表预处理、复杂 SQL 分解、数据倾斜七大方案,把近 10 亿行表的查询从 2 小时压到几分钟 ⚡。 ## 第一步:用 explain 看执

gitblog_00994的博客 997

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

华为的C语言编程规范.pdf

华为技术有限公司内部技术规范。本规范制定了编写C语言程序的基本原则、规则和建议。从代码的清晰、简洁、可测试、安全、程序效率、可移植各个方面对C语言编程作出了具体指导。

sql语句优化之SQL Server(详细整理)

这篇文章主要介绍了sql语句优化之SQL Server篇,整理的比较详细,推荐收藏 MS SQL Server查询优化方法 查询速度慢的原因很多,常见如下几种 1、没有索引或者没有用到索引(这是查询慢最常见的问题,是程序设计的缺陷) 2、I/O吞吐量小,形成了瓶颈效应。 3、没有创建计算列导致查询不优化。 4、内存不足 5、网络速度慢 6、查询出的数据

zxh2075的专栏 3128

Data-Structures-and-Algorithm-Analysis-in-Java.pdf

作者: Weiss, Mark A. 出版社: Addison Wesley Data Structures and Algorithm Analysis in Java is an “advanced algorithms” book that fits between traditional CS2 and Algorithms Analysis courses. In the old ACM Curriculum Guidelines, this course was known as CS7. This text is for readers who want to learn good programming and algorithm analysis skills simultaneously so that they can develop such programs with the maximum amo...

MySQL优化十条技巧提速不止十倍

  应用程序慢如牛,原因多多,可能是网络的原因、可能是系统架构的原因,还有可能是数据库的原因。      那么如何提高数据库SQL语句执行速度呢?有人会说性能调优是数据库管理员(DBA)的事,然而性能调优跟程序员们也有莫大的关系。    MYSQL优化技巧 程序中嵌入的一行行的SQL语句,如果使用了一些优化小技巧,定能达到事半功倍的效果。下面是微课帮小编整理的一些技巧。   技巧1 :比较...

云度 3805

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

mysql 配置提速_如何优化MYSQL语句让网站大提速系列2之SQL语句的优化

本文是如何优化MYSQL语句让网站提速系列的第二篇,sql语句的优化。主要是如何的显示慢查询、定位慢查询和explain分析sql语句。一、定位慢查询。增、删、改所占10%,查询所占90%。二、如何显示慢查询。三、如何定位慢查询。四、explain分析SQL语句。如何显示慢查询指令描述show status关于数据库的状态show status like 'com_insert'显示执行多少次的插...

weixin_30071787的博客 189

第二十四篇 SQL优化之高级用法

我是[随缘而动,随遇而安], 一个喜欢用生活案例讲技术的开发者。:就像查2023年的日记,直接找对应年份的本子,而不是每页都看。就像图书馆的书架标签太多反而更难找。:你在学习SQL时遇到过哪些坑?欢迎评论区留言讨论!:就像看病要先拍X光,调优前先看执行计划。:把大表按规则分割,就像把衣柜分季节整理。:报表统计、实时性要求不高的看板。:《SQL优化之分析函数》:数据同步、ETL处理。

qq_39991788的博客 980

SQL Server 2022下载提速与离线安装技巧

这样不仅避免安装过程中的网络请求,还能确保所有机器使用完全一致的组件版本。最近公司需要批量部署SQL Server 2022,发现传统安装方式耗时太长,一个服务器动辄就要1-2小时。经过一番摸索,我总结出一套优化方案,将整个流程缩短到20分钟以内。具体实现时需要注意设置合理的线程数(通常8-16个为宜),并添加校验机制确保文件完整性。开发了一个简单的GUI工具,用进度条显示下载和安装进度。上验证时,发现其内置的代码编辑器能直接调试安装脚本,省去了本地搭建测试环境的麻烦。特别值得一提的是,这套方案在。

IndigoNight21的博客 875

mysql select命令加速_如何优化MYSQL语句让网站大提速系列2之SQL语句的优化

本文是如何优化MYSQL语句让网站提速系列的第二篇,sql语句的优化。主要是如何的显示慢查询、定位慢查询和explain分析sql语句。一、定位慢查询。增、删、改所占10%,查询所占90%。二、如何显示慢查询。三、如何定位慢查询。四、explain分析SQL语句。如何显示慢查询指令描述show status关于数据库的状态show status like 'com_insert'显示执行多少次的插...

weixin_29351901的博客 270

SQL Server数据迁移金仓性能优化实战:从慢SQL到系统瓶颈,一套组合拳打下来

摘要:数据库迁移后的性能优化指南 本文针对SQL Server迁移至金仓数据库后常见的性能下降问题,提出系统性优化方案。首先指出性能下降的主因是未适配金仓特性的SQL写法、索引缺失及配置不当。优化步骤应遵循"先定位后优化"原则,优先解决SQL和索引问题(占80%性能问题),再调整系统参数。重点介绍了金仓自带的性能诊断工具(KWR、KSH、KDDM)和慢SQL定位方法,详细解析执行计划分析要点,并给出索引优化五大原则和SQL改写三大技巧(避免索引列运算、子查询转JOIN、游标分页替代大偏移分页)。通过更新统计

优快云博客专家,领域包括但不限于:AI、大数据、Python、架构师,有合作、课程、问题、疑惑请私信博主 1万+

SQL调优实战:百万级查询提速的黄金法则

当电商大促时数据库每秒处理万级查询,一个精妙的索引设计能让查询时间从秒级降至毫秒级!本文基于真实生产环境,通过20个实战案例+15段代码示例,深度拆解EXPLAIN执行计划解读、索引失效场景识别、复合索引设计法则三大核心技能,助你掌握数据库性能调优的终极密码。

Start_mswin的博客 772

Spark sql 常见问题及优化

目录数据倾斜1.null值的处理2.持续整理中... 数据倾斜 1.null值的处理 INSERT OVERWRITE TABLE tf_lte_prd_pd_inst_month PARTITION (month_id) SELECT prvnce_id, std_prvnce_cd ,... FROM ( SELECT '${V_DATE}' month_id ,..., C...

Jhon_yh的博客 3719

AI Agent 技能分享|SQL 性能诊断与优化

这篇文章介绍了SQL性能优化的系统性方法,提出应当将优化视为诊断过程而非盲目改写。作者将其整理为"SQL性能诊断与优化"技能,强调优化前需明确范围(执行性能、索引设计、业务逻辑等)并收集执行计划等关键证据。文章指出常见优化误区(如滥用函数、强制计划等),建议将优化建议分类输出(SQL改写、索引设计、业务方案等),并用多维指标验收效果。最后提供了使用该技能的方法,建议通过系统化的诊断流程避免"优化后更慢"的情况。

二等碗 409
上一篇: 微信网页版接口
下一篇: MySQL经典面试题
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值