rowcount y top

17/09/2003 - 09:43 por Alberto | Informe spam
¿Cuál es la diferencia entre las instrucciones RowCount y Top?

Gracias

Preguntas similare

Leer las respuestas

#1 Rubén Vigón
17/09/2003 - 10:11 | Informe spam
[...] SET ROWCOUNT difiere de TOP en estos aspectos:

- El límite SET ROWCOUNT se aplica a la construcción de filas del conjunto de resultados después de
que se evalúe una instrucción ORDER BY. Cuando se especifica ORDER BY, la instrucción SELECT se
termina cuando se hayan seleccionado n filas de un conjunto de valores que se han ordenado según la
clasificación ORDER BY especificada

- La cláusula TOP se aplica a la instrucción SELECT individual en la que se ha especificado. SET
ROWCOUNT permanece activada hasta que se ejecuta otra instrucción SET ROWCOUNT, como, por ejemplo,
SET ROWCOUNT 0 para desactivar la opción

Un saludo!

Rubén Vigón
Microsoft MVP Visual Basic
#2 Mariano Alvarez
18/09/2003 - 05:23 | Informe spam
No estoy de acuerdo, (pero mira mi conclusion)

Set rowcount le indica al motor cuantas filas te debe devolver de resultado
o cuantas filas debe afectar en la operacion por lo que el motor luego de
procesar esa cantidad de filas corta y no sigue la instruccion con el resto
de las filas y puede causarte ciertos problemas por ejemplo si tienes
triggers ya que sigue rigiendo el set rowcount. Sin embargo si tienes una
clausula order by se aplica despues del ORDER BY al contrario de lo que dice
la documentacion (que tengo a mano en este momento y es del SQL 7.0 en
ingles) por lo que te devuelve las ultimas filas o las primeras ordenadas
por el campo del ORDER BY

El TOP solo sirve para el SELECT en el cual participa y es practicamente la
misma semantica.

Esto es lo que dice el manual en ingles

"The SET ROWCOUNT limit applies to building the rows in the result set
before an ORDER BY is evaluated. Even if ORDER BY is specified, the SELECT
statement is terminated when n rows have been selected. n rows are selected,
then ordered and returned to the client"

Lo que traducido mas o menos seria:

"El limite SET ROWCOUNT se aplica a la construccion de filas en el conjunto
resultado antes de que un ORDER BY sea evaluado. Incluso, si se especifica
un ORDER BY, la expresion SELECT es terminada cuando han sido seleccionadas
n filas, n filas son seleccionadas, entonces ordenadas y devueltas al
cliente"

Te paso un ejemplo sobre northwind que contradice esto, sobre una columna no
indexada para evitar la posibilidad de que el planificador elija otro plan
si se hace un order by.

Si realizas la prueba del set rowcount con el order by indicado mas abajo
podras comprobar lo que te digo.

Si activas el SET SHOWPLAN_ALL ON en lugar del SET SHOWPLAN_TEXT ON veras
que el plan es el siguiente y que ambos operadores tienen un "EstimateRows"
= 830

Con Set rowcount

StmtText
-
-
|--Sort(ORDER BY:([Orders].[ShipName] ASC))
|--Clustered Index
Scan(OBJECT:([Northwind].[dbo].[Orders].[PK_Orders]))


Con TOP

|--Top(2)
|--Sort(ORDER BY:([Orders].[ShipName] ASC))
|--Clustered Index
Scan(OBJECT:([Northwind].[dbo].[Orders].[PK_Orders]))


El plan usa [Northwind].[dbo].[Orders].[PK_Orders] por que es el indice
clustered.

Tambien lo puedes comprobar si lo ejecutas, ya que veras que te vienen las
dos primeras de TODA LA TABLA ORDENADA.
No hace lo que dice el manual porque no tiene forma de seleccionar las dos
filas ordenadas por el campo "ShipName", a menos que primero ordene toda la
tabla porque "ShipName" no participa de ningun indice.

Ademas es el mismo resultado que usando un TOP

Este deberia ser el resultado si no colocas ORDER BY y esos son precisamente
los datos que deberia ordenar si hace lo que dice el manual.

/*--
select top 2 ShipName from orders
go
ShipName
-
Vins et alcools Chevalier
Toms Spezialitàten


Con TOP ordena y luego aplica el TOP

/*--
select top 2 ShipName from orders order by ShipName
ShipName
-
Alfreds Futterkiste
Alfred's Futterkiste

(2 row(s) affected)


Con Set Rowcount hace lo mismo y contradice el manual !!!!!!!!!!!!!!

/*--
Set rowcount 2
go
select ShipName from orders order by ShipName
ShipName
-
Alfreds Futterkiste
Alfred's Futterkiste

(2 row(s) affected)



CONCLUSION

Aunque no hace lo que dice, en mi humilde opinion, no debes confiarte que lo
que yo digo que hace es lo que siempre va a hacer, ya que no esta
documentado asi. Por lo tanto, mi sugerencia es "NO USAR" SET ROWCOUT y
ORDER BY juntos.



Jose Mariano Alvarez
Comunidad de base de datos
Grupo de Usuarios Microsoft
www.mug.org.ar


"Rubén Vigón" wrote in message
news:
Mostrar la cita
de resultados después de
Mostrar la cita
instrucción SELECT se
Mostrar la cita
se han ordenado según la
Mostrar la cita
se ha especificado. SET
Mostrar la cita
ROWCOUNT, como, por ejemplo,
Mostrar la cita
#3 Mariano Alvarez
18/09/2003 - 05:40 | Informe spam
Perdon, si esta documentado.

http://support.microsoft.com/defaul...?scid=http://support.microsoft.com:80/support/kb/articles/Q266/3/32.ASP&NoWebContent=1


Jose Mariano Alvarez
Comunidad de base de datos
Grupo de Usuarios Microsoft
www.mug.org.ar


"Mariano Alvarez" wrote in message
news:
Mostrar la cita
resultado
Mostrar la cita
resto
Mostrar la cita
dice
Mostrar la cita
la
Mostrar la cita
selected,
Mostrar la cita
conjunto
Mostrar la cita
seleccionadas
Mostrar la cita
no
Mostrar la cita
"EstimateRows"
Mostrar la cita
la
Mostrar la cita
precisamente
Mostrar la cita
lo
Mostrar la cita
conjunto
Mostrar la cita
la
Mostrar la cita
que
Mostrar la cita
#4 Miguel Egea
19/09/2003 - 14:23 | Informe spam
Además de esa diferencia, la más importante es que rowcount no es
recomendada como dicen los books on line en observaciones
/*
Es recomendable que las instrucciones DELETE, INSERT y UPDATE que
actualmente utilizan SET ROWCOUNT se vuelvan a escribir con la sintaxis TOP.
*/
lo que da idea de que quizá sea descontinuada proximamente.


Saludos Cordiales
=Miguel Egea
http://www.portalsql.com
Microsoft SQL-SERVER MVP.

¡Cuida el rendimiento! Evita los cursores
Brigada Anti-Cursores
==

"Mariano Alvarez" escribió en el mensaje
news:#
Mostrar la cita
http://support.microsoft.com/defaul...?scid=http://support.microsoft.com:
80/support/kb/articles/Q266/3/32.ASP&NoWebContent=1
Mostrar la cita
de
Mostrar la cita
una
Mostrar la cita
ordenadas
Mostrar la cita
SELECT
Mostrar la cita
especifica
Mostrar la cita
columna
Mostrar la cita
plan
Mostrar la cita
abajo
Mostrar la cita
veras
Mostrar la cita
las
Mostrar la cita
dos
Mostrar la cita
que
Mostrar la cita
que
Mostrar la cita
Ads by Google
Search Busqueda sugerida