SQL Server性能优化
2021/7/30 19:36:12
本文主要是介绍SQL Server性能优化,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
摘要:最近,讨论到数据库的优化问题,查看了很多网上的文章,说得都不是很全,有些经过测试还有错误,所以抽点空余时间写下这篇随笔,希望能对你有所帮助。
1、数据准备
首先要准备数据来进行测试,这里我们准备了两张员工表,Employee表220888条数据,Employee_B 199条数据
2、SQL Server性能优化之SQL语句总结
1、SELECT
尽量避免使用SELECT * 应根据需求在SELECT中指定列 SELECT item1,item2,如图
在select中指定所需要的列,将带来的好处:
(1)减少内存耗费和网络的带宽
(2)更安全
(3)给查询优化器机会从索引读取所有需要的列
2、COUNT(*)、COUNT(1)和COUNT([列])
(1)COUNT(*)和COUN(1)的区别:
COUNT(*)和COUNT(1)两者没有太大的区别,执行结果都是一样的,根据当时的业务场景,选择适用的Count,相对来说Count(1)的执行时间比较少。如图
(2)COUNT(*)和COUNT([列])的区别:
COUNT(*) 返回组中的项数。包括 NULL 值和重复项。
COUNT([列]) 返回非空值的数量
3、LIKE
应尽量避免'%Item%'的方式,除非必要,否则不要在关键字前加%,如下图
4、IN 、NOT IN、EXISTS、NOT EXISTS
1、IN 和 EXISTS区别:
IN 是把外表和内表作hash 连接,而EXISTS是对外表作loop循环,每次loop循环再对内表进行查询。EXISTS 和 IN 在执行时效率基本一致,执行时间相差不大(执行10次有时EXISTS快有时IN快,经测试:数据量小的表为主表速度会快很多,如果数据量一致,根据个人爱好选择)。如下图
2、NOT IN 和 NOT EXISTS区别:
NOT IN 在查询时主子查询都进行全表扫描,且没有用到索引;NOT EXISTS 的子查询会使用表中索引,所以无论主子结果集的大小 。所以NOT EXISTS执行效率都要比NOT IN高,如下图
5、IS NULL、IS NOT NULL
(1)应尽量避免在 WHERE子句中对字段进行 NULL值判断,否则将导致引擎放弃使用索引而进行全表扫描,如下图
(2)尽可能不要给数据库留NULL,备注、描述、评论之类的可以设置为 NULL,其他的,最好不要使用NULL。如下图(使用了索引)
6、!=、<>
在where子句中使用 != 或 <>操作符,索引将被放弃使用,会进行全表查询。如下图
这篇关于SQL Server性能优化的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-01-08Docker下的SqlServer发布订阅启用
- 2023-06-05Docker安装MS SQL Server并使用Navicat远程连接
- 2023-05-25深入浅出 SQL Server CDC 数据同步
- 2023-05-12通过空间占用和执行计划了解SQL Server的行存储索引
- 2023-04-24以SQLserver为例的Dapper详细讲解
- 2022-11-30SQL server高级函数查询
- 2022-11-26SQL SERVER数据库服务器CPU不能全部利用原因分析
- 2022-11-21SQL Server 时间算差值/常用函数
- 2022-11-20调试Archery连接SQL Server提示驱动错误
- 2022-10-22SQL Server 完整、差异备份+完整、差异还原(详细讲解,规避错误)