SQL Server中的游标是啥意思?
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了SQL Server中的游标是啥意思?相关的知识,希望对你有一定的参考价值。
语法我知道,我想知道游标是干什么的?一般什么时候会使用游标?求大神指点
①概念:游标(cursor)是系统为用户开设的一个数据缓冲区,存放SQL语句的执行结果。每个游标区都有一个名字。用户可以用SQL语句逐一从游标中获取记录,并赋给主变量,交由主语言进一步处理②特点:游标提供了一种对从表中检索出的数据进行操作的灵活手段,就本质而言,游标实际上是一种能从包括多条数据记录的结果集中每次提取一条记录的机制
③作用:当需要逐条读取记录时可以用游标,相当于for循环,一次获取一条记录进行操作。当一组记录没有id字段时,此时用for循环不能够实现,而游标可以解决此问题(注:当数据量很大的时候不建议使用游标,因为游标处理处理数据比较慢) 参考技术A
SQL Server中的游标相当于循环
使用游标(cursor)的一个主要的原因就是把集合操作转换成单个记录处理方式。用SQL语言从数据库中检索数据后,结果放在内存的一块区域中,且结果往往是一个含有多个记录的集合。游标机制允许用户在SQL
server内逐行地访问这些记录,按照用户自己的意愿来显示和处理这些记录。
. 如何使用游标:
一般地,使用游标都遵循下列的常规步骤:
(1)
声明游标。把游标与T-SQL语句的结果集联系起来。
(2)
打开游标。
(3)
使用游标操作数据。
(4) 关闭游标。
下列为游标SQL:
DECLARE Testcursor cursor
FOR SELECT * FROM test
OPEN
Testcursor
FETCH
NEXT from Testcursor
WHILE @@FETCH_STATUS =
0
BEGIN
--这里就是处理逻辑所在
FETCH NEXT from
Testcursor
END
CLOSE
Testcursor
DEALLOCATE
Testcursor
只有在少数情况下才应当使用游标。举两个例子:1. 需要遍历表名,进行DDL操作;2. 连续聚合,此时基于游标的解决方案可能比基于集合的解决方案更快。本回答被提问者采纳 参考技术C 游标(cursor)是系统为用户开设的一个数据缓冲区,存放SQL语句的执行结果。每个游标区都有一个名字。用户可以用SQL语句逐一从游标中获取记录,并赋给主变量,交由主语言进一步处理。
一般是在需要对查询的结果集中的数据再进行二次处理才会用到。 参考技术D 游标是在数据集中表示当前的位置的,一般是用在数据集的遍历用到,比如很多 resultset中
SQL Server 中的 PAGEIOLATCH_SH 等待类型是啥?
【中文标题】SQL Server 中的 PAGEIOLATCH_SH 等待类型是啥?【英文标题】:What is PAGEIOLATCH_SH wait type in SQL Server?SQL Server 中的 PAGEIOLATCH_SH 等待类型是什么? 【发布时间】:2010-10-11 20:40:00 【问题描述】:我有一个查询在交易过程中需要很长时间。当我得到进程的wait_type
时,它是PAGEIOLATCH_SH
。
这种等待类型是什么意思,如何解决?
【问题讨论】:
【参考方案1】:来自Microsoft documentation:
PAGEIOLATCH_SH
当任务正在等待
I/O
请求中的缓冲区的闩锁时发生。锁存请求处于共享模式。长时间等待可能表明磁盘子系统存在问题。
在实践中,这几乎总是由于对大表进行大量扫描而发生。在高效使用索引的查询中几乎不会发生这种情况。
如果你的查询是这样的:
Select * from <table> where <col1> = <value> order by <PrimaryKey>
,检查您在(col1, col_primary_key)
上是否有复合索引。
如果您没有,那么如果选择了PRIMARY KEY
,则需要完整的INDEX SCAN
;如果选择了col1
上的索引,则需要SORT
。
它们都是非常磁盘I/O
消耗大表上的操作。
【讨论】:
这是一个非常简单的查询。 Select * fromPAGEIOLATCH_SH
等待类型通常是由于索引碎片或未优化而出现的。
PAGEIOLATCH_SH
等待类型过多的常见原因是:
为了尝试解决具有高 PAGEIOLATCH_SH
等待类型,您可以检查:
PAGEIOLATCH_SH
等待类型的根本原因发现
在进行任何 I/O 子系统故障排除之前解决内存压力问题
请始终牢记,在 AlwaysOn AG 中的高安全性镜像或同步提交可用性的情况下,PAGEIOLATCH_SH
可能会增加/过多。
您可以在文章Handling excessive SQL Server PAGEIOLATCH_SH wait types中找到有关此主题的更多详细信息
【讨论】:
以上是关于SQL Server中的游标是啥意思?的主要内容,如果未能解决你的问题,请参考以下文章
对于 Visual Studio 2012 中的 SQL Server 数据库项目,“需要迁移”是啥意思