您现在的位置是:博客 > 文章详情文章详情
sql Service 海量数据查询,如何提高查询效率--数据库设计
1、对查询语句进行优化,应该尽量避免全表扫描,首先要考虑在 WHERE 及 ORDER BY 涉及的列上建立索引;
2、应该尽量避免在 WHERE
子句中对字段进行 null 值判断,否则将导致引擎放弃使用索引而进行全表扫描,例如: SELECT id FROM tab WHERE text IS NULL 可以在text上设置默认值0或者空(’’),确保表中text列没有null值,然后这样查询:SELECT id FROM tab WHERE text = 0 或者 SELECT id FROM tab WHERE text=’’;
3、并不是所有索引对查询都有效,SQL是根据表中数据来进行查询优化的,当索引列有大量数据重复时,查询可能不会去利用索引,例如:一张表中有字段sex,male、female
几乎各一半,那么即使在sex上建了索引也对查询效率起不了作用;
4、索引并不是越多越好,索引固然可以提高相应的 SELECT 的效率,但同时也降低了 INSERT 及 UPDATE 的效率,因为 INSERT 或 UPDATE 时有可能会重建索引,所以怎样建索引需要慎重考虑,视具体情况而定。一个表的索引数最好不要超过6个,若太多则应考虑一些不常使用到的列上建的索引是否有必要;
5、应该尽可能的避免更新索引数据列,因为索引数据列的顺序就是表记录的物理存储顺序,一旦该列值改变将导致整个表记录的顺序的调整,会耗费相当大的资源。若应用系统需要频繁更新索引数据列,那么需要考虑是否应将该索引建为索引;
6、应该尽量使用数字型字段,若只含数值信息的字段尽量不要设计为字符型,这会降低查询和连接的性能,并会增加存储开销。这是因为引擎在处理查询和连接时会逐个比较字符串中每一个字符,而对于数字型而言只需要比较一次就够了;
7、尽可能的使用 varchar/nvarchar
代替 char/nchar
,因为首先变长字段存储空间小,可以节省存储空间,其次对于查询来说,在一个相对较小的字段内搜索效率显然要高些;
8、尽量使用表变量来代替临时表。如果表变量包含大量数据,请注意索引非常有限(只有主键索引);
9、避免频繁创建和删除临时表,以减少系统表资源的消耗;
10、临时表并不是不可使用,适当地使用它们可以使某些例程更有效,例如,当需要重复引用大型表或常用表中的某个数据集时。但是,对于一次性事件,最好使用导出表;
11、在新建临时表时,如果一次性插入数据量很大,那么可以使用 SELECT INTO
代替 CREATE TABLE
,避免造成大量 log ,以提高速度;如果数据量不大,为了缓和系统表的资源,应先 CREATE TABLE
,然后 INSERT
;
12、如果使用到了临时表,在存储过程的最后务必将所有的临时表显式删除,先 TRUNCATE TABLE
,然后 DROP TABLE
,这样可以避免系统表的较长时间锁定。
相关文章
- Sql 查询时候,有个别表一直显示“正在执行中...”,但是其他表都是正常的(解决死锁问题)
- Sql Server通过关键字查询存储过程,视图等一些信息
- sql Service 海量数据查询,如何提高查询效率--SQL语句优化
- sql Service 海量数据查询,如何提高查询效率--数据库分区
- 使用 CREATE PARTITION SCHEME 建立分区方案,以及参数介绍
- 使用CREATE PARTITION FUNCTION 建立分区函数,以及参数介绍
- 如何手动设置SQL Server的最大内存占用
- SQL SERVER 智能提示工具
- sql 中如何将一个数据库生成脚本文件
- 使用sqlcmd 解决 Sql脚本太大,无法打开的问题
推荐阅读
-
.net 项目发布中的 Debug和Release的区别是什么?
![.net 项目发布中的 Debug和Release的区别是什么?](/ArticleFile/2023-09-09/93b4042444ff40aba6e7c913250e425f.png '.net 项目发布中的 Debug和Release的区别是什么?') 一、Debug 版本 Debug 是“调试”的意思,
-
Vs2022 设置类、接口默认创建的模板
一、前言 在团队协作中,每个人都负责这自己模块的代码。为了清楚的分辨代码是谁开发的, 我们往往会在类、接口增加一个额外的注释信息,例如:创建人、创建时间、描述等等。所以有些时候,我们希望 visual Studio 在创建类,接口的时候,生成的代码文件能更丰富一下, 例如:自动增加基础的注释功能, 类文件自动增加 p
-
如何使用 vs 2022 远程调试 Linux系统中的Docker容器项目
一、前言 在项目上,总会遇到一些奇怪的问题,例如:“在本地好好的, 为什么部署到线上就不行” 等等,这样的问题时长困扰着我们。但是作为一个资深的码农,“远程调试” 是一个不可或缺的手段。下面就来看下如果使用 vs 在本地远程调试部署在Linux系统中,运行在Docker容器中的项目吧。 二、远程调试 调试的前提,
-
移除Linux系统启动时的等待时间
一、前言 VMware 虚拟机中安装了很多Linux 系统,每次启动的时候, 都卡在系统选择的界面上,除非手动选择, 否则要等很久才会进入系统,如下图所示: ![移除Linux系统启动时的等待时间](/ArticleFile/2024-06-24/e3ab02212cc946bd9c23159895177fb3.png '移除Linux系统启动时的等待时间') 二、关闭系统等待的事件 我们
-
GitLab 私有化部署
一、GitLab 概述 git作为目前最流行的代码管理工具,已经成为了程序员必备的技能。虽然目前有 github(对国人不太友好) 、gitee 两个比较大的代码托管平台。但是出于各种原因,搭建自己的私有代码平台也成了一部分开发人员的选择。针对这种需求,这里为大家介绍的是其中的佼佼者gitlab,也是我们公司内部正在使用的一个代码管理平台。 GitLab是一个基于Git的开源代码管理平台,它
-
云服务器购买按量付费实例,并搭建私有网络图解
一、前言 最近在自学 k8s 集群化部署, 奈何云服务器包年包月太贵了, 学习成本飙升。好在各大云服务商支持按量计费 , 接下来就带大家一起过一下购买流程,并且使用私有网络。 二、私有网络 在购买云服务器之前,先了解下什么是私有网络。官网给出的解释是:私有网络(Virtual Private Cloud,VPC)是一块在云服务器上自定义的逻辑隔离网络空间,可以使云服务器, 云数据库资源构建逻
-
Docker 部署FastTunnel,实现内网穿透
一、前言 最近在学习搭建Elasticsearch集群,但是发现云服务(2核4G)资源根本就不够用,部署上去就直接宕机了。想着服务器资源太贵, 家里刚好有一台64G内存的闲置电脑。不如做一个内网穿透,可以远程访问。工作学习两不误。其实目前市面上已经有很多穿透工具了,比如向日葵~~ ,但是奈何带宽太小了,免费的才1M~~~ 二、什么是 FastTunnel FastTunnel 是用.net
-
IP地址和子网掩码的关系
一、概述 IP地址(Internet Protocol Address)和子网掩码(Subnet Mask)是计算机网络中两个核心的概念,它们共同工作以确保数据能够正确地在复杂的网络环境中传输到目标设备。 二、IP地址 `IP地址`是IP协议提供的一种统一的地址格式,它为互联网上的每一个网络和每一台主机分配一个逻辑地址,以此来屏蔽物理地址的差异。它是一个32位的二进制数,但是在习惯上,我们
-
修改Docker默认的存储驱动程序目录
一、前言 今天使用jenkins对程序进行更新的时候,发现更新失败。经排查是因为系统磁盘满了,然而通过堡垒机看了下,系统空间还有很多,于是看了下系统分区: ![修改Docker默认的存储驱动程序目录](/ArticleFile/2024-06-06/444ede8a1b1b42058db18690fa995952.png '修改Docker默认的存储驱动程序目录') ![修改Docker默认
-
Windows 安装git的详细安装步骤 ,以及TortoiseGit 图形化工具
一、前言 `Git` 是一个开源的分布式版本控制系统,用于有效、高速地处理从很小到非常大的项目版本管理。Git 与常用的版本控制工具 CVS, Subversion 等不同,它采用了分布式版本库的方式,不需要服务器端软件支持。 二、安装Git 1、Git 下载地址 [Git 下载地址](https://git-scm.com/downloads "Git 下载地址") ![Windows
暂无评论