首页 > 数据库 >SQL优化(2)

SQL优化(2)

时间:2023-08-20 22:44:56浏览次数:40  
标签:存储 聚集 查询 索引 IO SQL 优化

数据库优化 快照隔离 在保护事务不脏读未提交的数据修改的同时尽量减少锁定争用(数据修改的同时可以读取未提交修改前的)

 

查询状态 SELECT name,is_read_committed_snapshot_on FROM sys.database 设置快照隔离 ALTER DATABASE database_name SET READ_COMMITTED_SNAPSHOT ON 查询过程

 

Tempdb 主要存储临时表、中间查询结果、排序操作、行版本控制的版本存储等 不同文件可以放在不同的物理磁盘上以提高IO吞吐量 与计算机上的CPU数量一致,可以避免资源争用等一些问题,某些情况下会带来一些好处 SQL优化 如何查找有问题的SQL
  • 活动监控器
  • 性能报表
  • SQL Server Profiler
  • 查询存储
如何找到SQL语句的性能问题?
  • 执行计划
  • 性能统计
IO是有缓存的,光看执行时间是没有办法真实统计性能差异的,有可能数据被缓存了,开启IO统计,可以查看逻辑读取了几次,查看性能差异 SET STATISTICS TIME ON --统计时间 SET STATISTICS IO ON --统计IO 性能优化 数据存储:行存储与列存储;行存储更适合数据维护场景;列存储更适合数据分析场景;

 

表存储类型 行存储:聚集索引,使用B+树 列存储:聚集列存储索引 索引限制 一个表中聚集索引和聚集列存储索引只能二选一 一个表中非聚集索引和非聚集列存储索引可以并存   行存储索引:索引结构 B+Tree 聚集索引
  • 聚集索引中,叶节点包含基础表的数据页
  • 数据链内的页和行按聚集索引键值进行排序
  • 主键通常是聚集索引,但可以不是聚集索引
非聚集索引
  • 基础表的数据行不会过根据其非聚集键值按顺序排序和存储
  • 非聚集索引的叶级别是由索引页而不是由数据页组成。非聚集索引的叶级别的索引页包含键列以及包含列

 

索引设计
  • 包含列
  • 筛选器(条件索引)

 

索引选择
  • 统计信息
  • 表或索引视图的一列或多列的值分布有关的统计
  • 查询优化器使用统计信息创建可提高查询性能的查询计划,估计查询结果中的技术或行数
  • 对于大多数查询,会自动生成必要的统计信息
  • 直方图度量数据集中每个非重复值的出现频率。密度矢量度量给定列或列组合中重复项数目的信息
  • 优化建议:什么都不要做,即不要强制指定索引
存储结构:页存储 常见的索引设计建议
  • 优先选择唯一性索引
  • 为常作为查询条件的字段建立索引
  • 经常需要排序、分组和联合操作的字段建立索引
  • 尽量使用数据量少的索引,如果字段数据大,索引表体积相对较大,当发生索引扫描时影响比较严重
  • 控制索引数量,索引的字段发生修改时需要更新索引,过多索引影响表性能
  • 删除很少用的索引,可以通过报表查看索引使用情况
  • 复合索引区分度大的字段放在前面
  • 区分度小的字段不建议创建索引,比如性别
  • 命名建议用索引的字段名作为名称,方便在查询计划中分辨,不建议添加“IX"之类的前缀,SQL Server 索引名称允许跨表重名
其他优化:

 

 

 

   

标签:存储,聚集,查询,索引,IO,SQL,优化
From: https://www.cnblogs.com/xjxue/p/17644776.html

相关文章

  • SQL 优化(1)
    SQLServer查询优化器筛选条件分析通过筛选条件减少扫描范围注意项:模糊查询,尽量不要把百分号放置在前面:LIKE‘%xx’,查询优化器无法对此优化,只能扫描查找(表扫描或索引扫描查找)尽量避免使用OR(可考虑UNIONALL),扰乱查询优化器流程避免对列值进行运算,查询不走索引避免使用NO......
  • SQL 基础(2)
    casewhen查询SELECTname,course,score,casewhenscore<60then'不及格'whenscore>=60then'及格'whenscore<80andscore>=70'良好'else'优秀'endascolumn_nameFROMtable_nameSELECTname,course,scorecase......
  • 测试使用QT来连接SQLServer并取出表格数据
    测试使用QT来连接SQLServer并取出表格数据添加引用工程文件需要加入 QT+=sql在main.cpp添加头文件引用//添加头文件#include<qdebug.h>#include<QSqlDatabase>#include<QSqlError>#include<QSqlQuery>连接数据库QSqlDatabasedb=QSqlDatabase::addDatabase("QODBC");......
  • MYSQL: length() vs char_length()
     selectlength('€'),char_length('€')-->1,1 LENGTH() returnsthelengthofthe stringmeasuredinbytes.CHAR_LENGTH() returnsthelengthofthe stringmeasuredincharacters.ThisisespeciallyrelevantforUnicode,inwhich......
  • Cause: java.sql.SQLException: Field 'id' doesn't have a default value Field 'id&
    报错内容: 是因为实体类文件中设置主键自增的类型不对导致的,建议再温习一下逐渐自增的类型以及使用方式我自己的实体类里面设置的IdType为auto,但是主键id是char类型的,还不是int数值类型,所以无法设置为自增 这里需要换成IdType.ID_WORKER_STR@ApiModelProperty(......
  • 【数据库】MySQL的一些基础知识
    ALTERTABLE表名DROP属性名删除数据表DROPTABLE数据库名.表名;用户管理创建用户CREATEUSER'username'@'host'IDENTIFIEDBy'password';username:欲创建用户的用户名password:用户密码host:主机地址,例如localhost、192.168.1.1用户删除DROPUSER'username'@......
  • 深入理解数据库索引优化策略
    数据库索引在后端开发中扮演着至关重要的角色,它们能够显著提升查询性能和数据检索效率。然而,在面对大规模数据和复杂查询的情况下,如何优化索引策略成为了一个挑战。本篇博客将深入探讨数据库索引优化策略,涵盖Java和Python的实例,并介绍一些常见的数据库索引类型。索引的重要性索引是......
  • 深入研究高性能数据库连接池的实现原理与优化策略
    在现代的后端应用开发中,数据库连接池是提高性能和可伸缩性的关键组件之一。本文将深入探讨数据库连接池的实现原理,涵盖Java和Python示例,并介绍一些常见的连接池优化策略。数据库连接池的作用数据库连接池是一种维护和管理数据库连接的技术,它通过预先创建一组数据库连接,并将这些连接......
  • 深入理解数据库索引优化策略与原理
    在后端开发领域,数据库索引是优化查询性能的关键因素之一。本文将深入探讨数据库索引的优化策略和原理,重点关注Java与Python开发环境中的实际应用,同时结合Nginx与Elasticsearch等技术,为读者提供深奥的干货内容。1.索引概述与原理数据库索引是一种用于加速数据检索操作的数据结构。......
  • 高效利用Python装饰器优化函数功能与性能
    在后端开发领域,Python作为一门广泛应用的编程语言,为开发人员提供了丰富的工具和库。本文将深入探讨Python装饰器的原理、用法以及如何利用装饰器优化函数的功能和性能。通过结合实际示例,为读者提供关于装饰器的深奥知识和实用代码。1.装饰器概述与原理装饰器是Python中一种强大的......