Consulta

22/06/2006 - 19:20 por anonimo | Informe spam
una pregunta tengo una pagina de inscripcion en donde actualmente hay un
millon de registros, el usuario puede escojer su username que usuara para la
pagina, cual seria la mejor forma para revisar mediante un query u otra
manera si ese username ya esta siendo utilizado por algun otro usuario.
Actualmente yo lo realizo po un : select count(username) from usuarios where
username='username'

a la tabla ya le cree un index sobre esa solumna de la tabla.
Gracias.

Preguntas similare

Leer las respuestas

#1 Alejandro Mesa
22/06/2006 - 19:29 | Informe spam
anoninmo,

No es necesario contar para validar existencia. Preferible que uses el
operador "exists".

if exists (select * from usuarios where username='username')
print 'ese usuario existe'
else
print 'ese usuario no existe'
go


AMB

"anonimo" wrote:

una pregunta tengo una pagina de inscripcion en donde actualmente hay un
millon de registros, el usuario puede escojer su username que usuara para la
pagina, cual seria la mejor forma para revisar mediante un query u otra
manera si ese username ya esta siendo utilizado por algun otro usuario.
Actualmente yo lo realizo po un : select count(username) from usuarios where
username='username'

a la tabla ya le cree un index sobre esa solumna de la tabla.
Gracias.
Respuesta Responder a este mensaje
#2 Isaias
22/06/2006 - 19:52 | Informe spam
Alex

¿No crees que seria mejor substituir el ASTERISCO (*), por el nombre de
algun campo de la tabla?

if exists (select username from usuarios where username='username')
print 'ese usuario existe'
else
print 'ese usuario no existe'
go

Saludos
IIslas


"Alejandro Mesa" wrote:

anoninmo,

No es necesario contar para validar existencia. Preferible que uses el
operador "exists".

if exists (select * from usuarios where username='username')
print 'ese usuario existe'
else
print 'ese usuario no existe'
go


AMB

"anonimo" wrote:

> una pregunta tengo una pagina de inscripcion en donde actualmente hay un
> millon de registros, el usuario puede escojer su username que usuara para la
> pagina, cual seria la mejor forma para revisar mediante un query u otra
> manera si ese username ya esta siendo utilizado por algun otro usuario.
> Actualmente yo lo realizo po un : select count(username) from usuarios where
> username='username'
>
> a la tabla ya le cree un index sobre esa solumna de la tabla.
> Gracias.
Respuesta Responder a este mensaje
#3 Alejandro Mesa
22/06/2006 - 20:51 | Informe spam
Isaias,

Siempre ha existido polemica sobre tu pregunta y de verdad que nadie a
probado cual de las dos versiones brinda mejor rendimiento.

Mi humilde opinión es que cuando usamos "*", SQL Server se encarga de cojer
lo primero que retorne la sentencia. Si usamos el nombre de una columna, SQL
Server debe verificar que esa columna exista en la definicion de la tabla.
Otros programadores usan una constante (incluyendo NULL).

if exists(select null from dbo.orders where orderid = 10250)
...

if exists(select 1 from dbo.orders where orderid = 10250)
...

if exists(select * from dbo.orders where orderid = 10250)
...

if exists(select [orderid] from dbo.orders where orderid = 10250)
...

Que version es mejor?. Creo que todas, pero yo para no comprometerme
prefiero usar el "*". En caso de existir, SQL Server para tan pronto como le
llegue el primer valor.


AMB


"Isaias" wrote:

Alex

¿No crees que seria mejor substituir el ASTERISCO (*), por el nombre de
algun campo de la tabla?

if exists (select username from usuarios where username='username')
print 'ese usuario existe'
else
print 'ese usuario no existe'
go

Saludos
IIslas


"Alejandro Mesa" wrote:

> anoninmo,
>
> No es necesario contar para validar existencia. Preferible que uses el
> operador "exists".
>
> if exists (select * from usuarios where username='username')
> print 'ese usuario existe'
> else
> print 'ese usuario no existe'
> go
>
>
> AMB
>
> "anonimo" wrote:
>
> > una pregunta tengo una pagina de inscripcion en donde actualmente hay un
> > millon de registros, el usuario puede escojer su username que usuara para la
> > pagina, cual seria la mejor forma para revisar mediante un query u otra
> > manera si ese username ya esta siendo utilizado por algun otro usuario.
> > Actualmente yo lo realizo po un : select count(username) from usuarios where
> > username='username'
> >
> > a la tabla ya le cree un index sobre esa solumna de la tabla.
> > Gracias.
Respuesta Responder a este mensaje
#4 Maxi
22/06/2006 - 20:56 | Informe spam
mmm, ojo con el tema indices, si usas el * SQL es muy probable que haga un
Cluster index Scan.
Fijate en www.sqlgurus.org en la seccion charlas y en la que dice Best
Practice, hay unos ejemplos donde se demuestra que sucede cuando se aplica
el *.
De hecho si corres el BPA (Best Practice Analizer) te detecta esto y te
recomienda no usar el *


Salu2
Maxi [MVP SQL SERVER]
www.sqlgurus.org


"Alejandro Mesa" escribió en el
mensaje news:
Isaias,

Siempre ha existido polemica sobre tu pregunta y de verdad que nadie a
probado cual de las dos versiones brinda mejor rendimiento.

Mi humilde opinión es que cuando usamos "*", SQL Server se encarga de
cojer
lo primero que retorne la sentencia. Si usamos el nombre de una columna,
SQL
Server debe verificar que esa columna exista en la definicion de la tabla.
Otros programadores usan una constante (incluyendo NULL).

if exists(select null from dbo.orders where orderid = 10250)
...

if exists(select 1 from dbo.orders where orderid = 10250)
...

if exists(select * from dbo.orders where orderid = 10250)
...

if exists(select [orderid] from dbo.orders where orderid = 10250)
...

Que version es mejor?. Creo que todas, pero yo para no comprometerme
prefiero usar el "*". En caso de existir, SQL Server para tan pronto como
le
llegue el primer valor.


AMB


"Isaias" wrote:

Alex

¿No crees que seria mejor substituir el ASTERISCO (*), por el nombre de
algun campo de la tabla?

if exists (select username from usuarios where username='username')
print 'ese usuario existe'
else
print 'ese usuario no existe'
go

Saludos
IIslas


"Alejandro Mesa" wrote:

> anoninmo,
>
> No es necesario contar para validar existencia. Preferible que uses el
> operador "exists".
>
> if exists (select * from usuarios where username='username')
> print 'ese usuario existe'
> else
> print 'ese usuario no existe'
> go
>
>
> AMB
>
> "anonimo" wrote:
>
> > una pregunta tengo una pagina de inscripcion en donde
> > actualmente hay un
> > millon de registros, el usuario puede escojer su username que usuara
> > para la
> > pagina, cual seria la mejor forma para revisar mediante un query u
> > otra
> > manera si ese username ya esta siendo utilizado por algun otro
> > usuario.
> > Actualmente yo lo realizo po un : select count(username) from
> > usuarios where
> > username='username'
> >
> > a la tabla ya le cree un index sobre esa solumna de la tabla.
> > Gracias.
Respuesta Responder a este mensaje
#5 Isaias
22/06/2006 - 21:06 | Informe spam
Hola Alex

En realidad, no fue una PREGUNTA ,mas bien una OBSERVACION (comentario).

Alguna vez lei, en este mismo foro, la verdad no recuerdo quien hizo la
misma observacion (Eladio Rincon, Miguel Egea o si fue el mismo Maxi), que
cuando usas el ASTERISCO, SQL Server recorre la totalidad de las columnas, la
observacion fu en un COUNT():

SELECT COUNT(*) FROM MyTabla WHERE.

Suponiendo (solo eso), que la tabla en cuestion tuviera 100 columnas, las
mismas que tomaria en el count de registros.

Y se recomendaba cambiar el count, de la siguiente forma:

SELECT COUNT(MyColumna) FROM MyTabla WHERE.

La verdad, no se si esto mismo aplique en el IF EXISTS(), pero como medida
precautoria (sin haber hecho ningun analisis al respecto), a mi grupo de
desarrolladores les he pedido que cambien su forma de verificar el IF
EXISTS(), con algun nombre de columna.

Aunque, como tu dices, "nadie tendra la verdad absoluta" (¿?), porque como
bien dice el dicho, "Nadie tiene la verdad absoluta y esto, es la verdad".

Siempre es muy interesante para mi, leer tus respuestas (comentarios) y
agradezco la luz que nos das, en particular, en este foro.
Saludos
IIslas


"Alejandro Mesa" wrote:

Isaias,

Siempre ha existido polemica sobre tu pregunta y de verdad que nadie a
probado cual de las dos versiones brinda mejor rendimiento.

Mi humilde opinión es que cuando usamos "*", SQL Server se encarga de cojer
lo primero que retorne la sentencia. Si usamos el nombre de una columna, SQL
Server debe verificar que esa columna exista en la definicion de la tabla.
Otros programadores usan una constante (incluyendo NULL).

if exists(select null from dbo.orders where orderid = 10250)
...

if exists(select 1 from dbo.orders where orderid = 10250)
...

if exists(select * from dbo.orders where orderid = 10250)
...

if exists(select [orderid] from dbo.orders where orderid = 10250)
...

Que version es mejor?. Creo que todas, pero yo para no comprometerme
prefiero usar el "*". En caso de existir, SQL Server para tan pronto como le
llegue el primer valor.


AMB


"Isaias" wrote:

> Alex
>
> ¿No crees que seria mejor substituir el ASTERISCO (*), por el nombre de
> algun campo de la tabla?
>
> if exists (select username from usuarios where username='username')
> print 'ese usuario existe'
> else
> print 'ese usuario no existe'
> go
>
> Saludos
> IIslas
>
>
> "Alejandro Mesa" wrote:
>
> > anoninmo,
> >
> > No es necesario contar para validar existencia. Preferible que uses el
> > operador "exists".
> >
> > if exists (select * from usuarios where username='username')
> > print 'ese usuario existe'
> > else
> > print 'ese usuario no existe'
> > go
> >
> >
> > AMB
> >
> > "anonimo" wrote:
> >
> > > una pregunta tengo una pagina de inscripcion en donde actualmente hay un
> > > millon de registros, el usuario puede escojer su username que usuara para la
> > > pagina, cual seria la mejor forma para revisar mediante un query u otra
> > > manera si ese username ya esta siendo utilizado por algun otro usuario.
> > > Actualmente yo lo realizo po un : select count(username) from usuarios where
> > > username='username'
> > >
> > > a la tabla ya le cree un index sobre esa solumna de la tabla.
> > > Gracias.
Respuesta Responder a este mensaje
Ads by Google
Help Hacer una preguntaSiguiente Respuesta Tengo una respuesta
Search Busqueda sugerida