SQL SERVER的优化建议与方法
发布时间:2024-01-20 15:14:58
在实际的工作中,尤其是在生产环境里边,SQL语句的优化问题十分的重要,它对数据库的性能的提升也起着显著的作用.我们总是在抱怨机器的性能问题,总是在抱怨并发访问所带来的琐问题,但是如果我们对没一条SQL语句进行优化,尽管不能说可以解决全部问题,但是至少可以解决大部分问题.
1.Top排序问题.
我们经常要对表某个字段进行排序,然后取前N名.所以我们会写如下的SQL语句:
select top 100 * from 表
order by Score desc
如果表非常大的话,那么这样的操作是非常消耗资源的,因为SQL SERVER要对整个表进行排序,然后取前N条记录.这样的造作是在Temdb里边进行的,所以极端的时候会报Log已满这样的错误.为了避免进行全表的排序,我们要做的仅仅是在Score上建立索引,这样因为Score索引的叶级是有序的,只要在Score所以的页级取前100个,然后根据书签查找到实际的记录,这样对DB的性能就会有极大的提升.
2.同一天问题.
我们经常要查找和一个日期同一天的记录,所以我们回写如下的SQL语句;
declare @DateTime datetime
set @DateTime=getdate()
select * from 表
where convert(char(10),F_Time,120)=convert(char(10),@DateTime,120)
但是这样写的SQL语句带来的问题就是不能使用F_Time上的索引了.为了近可能的使用F_Time上的索引,我们可以使用时间段查询的方式来代替上边的语句.
declare @start datetime
declare @end datetime
declare @datetime datetime
set @datetime=getdate()
set @start=convert(char(10),@datetime,120) -- 一天的其始时间
set @end=dateadd(ss,-1,dateadd(d,1,@start)) -- 一天的结束时间
select *from 表 where F_Time between @start and @end
这样就解决了使用不上索引的问题.
3.利用索引进行分组操作.】我们经常要对某一字段进行分组,而对另外一些字段进行聚合操作.如果我们对分组的字段合理的使用索引,可以加快我们分组的速度.下边以Northwind的Orders表为例:
-- orders表的EmployeeID上建有索引.
select EmployeeID,count(*)
from orders
group by EmployeeID
-- 查看执行计划,此查询利用了EmployeeID上的索引.如改成如下查询:
select EmployeeID,sum(Freight)
from orders
group by EmployeeID
-- 查看执行计划,此查询则没有使用EmployeeID上的索引.而是使用了全表扫描.那么原因是什么呢?是因为Freight没有在EmployeeID的索引上,所以通过索引不能得到结果.而如果通过书签查询的成本太高,所以SQL SERVER选择了使用全表扫描.而如果我们执行在EmployeeID和Freight上建立复合索引呢?
create index idx_EmployeeID on orders(EmployeeID,Freight)
-- 再次执行第二个查询.查看执行计划.SQL SERVER使用的我们建立的索引.只需要使用索引就可以查询到结果,极大的提高了我们的查询速度.


猜你喜欢
- HTTP Referer是header的一部分, 当浏览器向web服务器发送请求的时候,一般会带上Referer,告诉服务器我是从哪个页面链
- 继续我们的 Javascript 优化计划,上期已经做到怎么尽可能的缩小 Javascript 脚本的文件体积便于传输。不过这样做仅仅是不够
- 字符串是不可变类型,可以重新赋值,但不可以索引改变其中一个值,只能拼接字符串建立新变量索引和切片索引:越界会报错切片:越界会自动修改不包含右
- 本文实例讲述了Python进阶之使用selenium爬取淘宝商品信息功能。分享给大家供大家参考,具体如下:# encoding=utf-8_
- 一、前言很多网站提供视频转GIF的功能,但要么收费要么有广告实际上我们通过python,几行代码就能够实现视频转gif二、教程1. 安装必备
- Python保存网页图片这个是个比较简单的例子,网页中的图片地址都是使用'http://。。。。.jpg'这种方式直接定义的
- python列表元素去重后如何保持原来的顺序不变原列表:list1 = [1,2,1,4,9,3,5,2,6,7,3,1,6,8,4,0]去
- 一、题目二、数学求解过程该轮迭代分类结果全部正确,判别函数为g(x)=-2x1+1三、感知器算法原理及步骤四、python代码实现及结果(1
- 公司里很多部门,每个部门可以发多条信息,但每条信息只对应一个部门部门类:class Dep(models.Model): nam
- 这篇文章主要介绍了Django rstful登陆认证并检查session是否过期代码实例,下面我们可以来一起学习一下。一:restful用户
- 内容摘要:MySQL易学易用,附带丰富的技术文档,这两个因素使之被广泛应用。然而,随着MySQL发展加快,即使一个MySQL老手有时也会为该
- 前言最近接手了一个项目,由于之前为了快速开发,没有做代码检查。为了使得代码更加规范以及更易读,所以就要eslint上场了。安装依赖安装依赖有
- 下面这段代码是asp编写的用来识别客户端是否为手机浏览器,以及手机类型的代码。主要用于手机网站的建设,以便实现相同网址下的不同版本网站(比如
- 惊现!表面下的隐藏信息——浅谈信息可视化1910年,病卧床上的魏格那(德国气象学家,以“大陆漂移学说”闻名),无意地注视着墙上的世界地图……
- function click(e) { if (document.all) { if (event.button==1||event.but
- 第一种:使用CSS属性var display =$('#id').css('display');if(dis
- 一、掩膜(mask)在有些图像处理的函数中有的参数里面会有mask参数,即此函数支持掩膜操作,首先何为掩膜以及有什么用,如下:数字图像处理中
- 一、VS2008工程设置工作 首先,建立一个windows应用程序的工程,将C/C++->预处理器->预处理器定义下的_WIND
- 1、pyecharts绘制饼图(显示百分比)# 导入模块from pyecharts import options as optsfrom
- 我就废话不多说了,大家还是直接看代码吧!talk is cheap from openpyxl import Workbook