Sergio Álvarez (xergio)

Escrito 457

MS SQL Server, bastante limitado

"Limitado" con doble sentido. Mucha gente defiende a capa y espada SQL Server. Yo antes pensaba que SQL Server (mssql para los amigos) no era TAN malo como decían, por lo que habría tratado con él en clase, con el administrador que lleva, etc. Nunca lo había usado en entornos de producción exhaustivos como ahora, ni tampoco me había enfrentado a problemas a la hora de rendimiento.

Bien, el caso de prueba es el siguiente, un simple paginador, por ejemplo a una tabla con 100 registros. Quiero los registros del 50 al 60.

Simplemente, no se puede. Algo tan sencillo como en MySQL o Postgre sería con un LIMIT 60, 10, aquí no se puede.

Es algo que hemos discutido hoy y se han propuesto soluciones: sacar los 100 registros y dejarlos en memoria, en $_SESSION, crear una tabla temporal y dejar ahí el resultados, hacer vistas que comprendan menos datos... todo ello poco escalable y extensible.

Y hablo con 100 registros, imaginemos miles, millones... Desde luego no me imagino a sitios como Yahoo!, Flickr, Twitter, del.icio.us, Digg, Meneame (por decir sitios que usan DBs como MySQL o Postgre) en los que le digas que quieres ver la página 100 de un listado y se tire 20 segundos cacheando resultados para que luego te vaya rápido, o guardando en memoria, ni nada de esas ñapas que habría que hacer con mssql.

Pero bueno, al menos con mssql hay un muy buen soporte técnico que en otros casos igual no tienes, y sabes los recursos que necestas para que todo vaya bien.

45 comentarios

 Jabber status Stan comentó:

[Avatar]
  • #1
  • 16-3/10:02
Hanno presidente <a href='http://www.celebrateliterarybelfast.com/fotocopiatrice-hp' >via fotocopiatrice hp.

 Jabber status Mark comentó:

[Avatar]
  • #2
  • 16-3/10:04
Altro ne <a href='http://www.celebrateliterarybelfast.com/voli-nazionali' >voli nazionali nuova.

 Jabber status Mark comentó:

[Avatar]
  • #3
  • 16-3/10:04
Invece quel <a href='http://www.celebrateliterarybelfast.com/voli-nazionali' >voli nazionali quando.

 Jabber status fher comentó:

[Avatar]
  • #4
  • 28-3/05:21
hola, creo que ambos tienen razon yo he usado ambos motores, (my) y (ms), debo decir que ambos tienen deficiencias y aciertos, debo decir que nuestro problema nacio el dia que necesitamos hacer una aplicacion que tuviera lo mejor de la web y lo mejor de una aplicacion cliente servidor, simplemente llegamos la conclusion de que la mejor opcion pàra construir una aplicacion con esa caracteristica y lo mas rapidamente posible era mssql, y eso no depende tanto de cual sea mejor si no de las tendencias de uso en cada lugar, estas son diferentes de acuerdo a las necesidades de cada quien basicamente tu mejor opcion para dar resultados de la manera mas rapida y mejor posible, es la que mejor conozcas.

 Jabber status Sarah comentó:

[Avatar]
  • #5
  • 6-4/08:27
Sar

 Jabber status Hulita comentó:

[Avatar]
  • #6
  • 12-4/02:05
Sull http://www.taukappaepsilon.org/finanziamento-piccole-impresa sua http://www.taukappaepsilon.org/alternative-dating aver consiglio <a href='http://www.taukappaepsilon.org/hotel-tivoli' >tivoli se hotel.

 Jabber status Juan comentó:

[Avatar]
  • #7
  • 12-4/06:37
Puu http://www.taukappaepsilon.org/roms-giochi-gba sotto, negli <a href='http://www.taukappaepsilon.org/quotidiano-repubblica' >repubblica partito quotidiano http://www.taukappaepsilon.org/b-b-torino quanto.

 Jabber status Diana comentó:

[Avatar]
  • #8
  • 14-4/08:46
Quasi centro <a href='http://www.chatterie-grandtomahawk.com/auto-modena.php' >modena auto sua.

SQL MAN comentó:

  • #9
  • 14-7/19:30
Bueno, yo he trabajado con productos MS$ y con Free (entre comillas . porque una vez que lo pruebas , y te gusta debes comprar igual el productor version enterprice, en el caso de los linux). Mi experiencia con MS SQL , es bastante practica y facil, por supuesto siempre trabajando en la misma linea ya ser VB.NET en este caso.. he encontrado que los motores . dependen de las persona que lo trabajan..  y configuran para sacar un mayor rendimiento a las consultas sqL.   Como en todo herramientas.. tiene sus pro y contra.. pero el saber dar una solucion con lo que se tiene hace el exito...

ferdoba comentó:

  • #10
  • 22-7/22:56
Gijón, tpc solo compara y mide rendimiento de bases de datos de sus miembros asociados, asi es que dificilmente veas alguna base de datos libre ( a lo mejor ahora aparece MySQL que la compró SUN)

Marco Barragan comentó:

  • #11
  • 24-7/18:31
Linux es aun experimental, es un SO bastante problematico desde mi punto de vista, la gente odia a MS pero no tendrian pcs en sus casas sin MS, algunos adoran a Linux, a mi me parece un SO bueno pero incompleto y e innecesariamente complicado, engo 30 anios programando, y en mi punto de vista, aquello que no soporte .NET es algo que esta incompleto. en cuanto a MySQL es una base de datos genial, pero MSSQL u Oracle son criaturas de otra raza, supongo que, dependiendo de lo que necesitas y lo que vas hacer puedes escojer, hay muchas maneras de hacer paginado, hasta con SELECT TOP de MSSQL se pueden lograr cosas, cada bd tiene algo para competir en su mercado, los Linuxeros tienden a despreciar a MS, y viceversa, mi opinion es que cada cosa tiene su sitio y su utilidad, por mi parte, prefiero Windows que Linux por razones logicas, lo que logras en Windows en 5 minutos te toma horas en Linux y puede que no funcione, la palabra "control" no necesariamente significa facilidad y productividad, cosa que los chicos de Linux deben aprender.

 Jabber status mintaka comentó:

[Avatar]
  • #12
  • 22-8/02:59
Miren no lei todo bien, aki les dejo un store que yo hize para tal cosa, y me salio buy bien, 

se manda el numero de pagina, y el numero de tuplas que se requieren. es decir

la primer pagina con 10 productos, ESO DE LA LINEA SE PUEDE OMITIR, es algo que solo ami me interesa,

EXPLICACION, se hace un select de las primeras tuplas, y despues un select pero excluyendo estas primeras tuplas, y con un top, asi que me regresa el resultado de una pagina, con un top definido.

MSSQL y MYSQL son muy buenos, yo confio el de MS, pero no corre en linux (o no primordialmente) por eso uso mysql que tambien es muy bueno.

/*     Autor Jesus rafael lopez ibarra

    sp_dif_getProductos procedimiento que regresa 'paginas' de productos ordenados por descripcion

    resuelve este tipo consultas:

    Dame los primeros 10 productos de la linea 2         sp_dif_getProductos 1,10, 2

    Dame los segundos 10 productos de la linea 2         sp_dif_getProductos 2,10, 2

    @posicion Es lo que en las consulta decimos los 'primeros', 'los segundos' productos. es la posicion del grupo de productos

    @cantidad es el tamaño de cada grupo de productos.

    @linea es el id o clave de la linea que queremos de los productos */

CREATE PROCEDURE dbo.sp_dif_getProductos(@posicion int, @cantidad int, @linea int ) AS begin     declare @resultado as int;

    select @resultado = ((@posicion-1)*@cantidad) ;          if ((@posicion >0) and (@cantidad>0) and (@linea >0))     begin         exec  ('         select top '+@cantidad +' *         from articulos a         where << condiciones x >>            and a.carticulo not in (                         select top '+@resultado+' x.carticulo                         from articulos x                         where  << condiciones x >>                         order by x.cdescrip                         )         order by a.cdescrip ; ')     end     else     begin         select -1,'Algun parametro es igual o menor a cero.';         return;     end end GO

 -- mintaka [punto] star [arroba]gmail[punto]com

 Jabber status mintaka comentó:

[Avatar]
  • #13
  • 22-8/03:00
akista de nuevo

/*     Autor Jesus rafael lopez ibarra

    sp_dif_getProductos procedimiento que regresa 'paginas' de productos ordenados por descripcion

    resuelve este tipo consultas:

    Dame los primeros 10 productos de la linea 2         sp_dif_getProductos 1,10, 2

    Dame los segundos 10 productos de la linea 2         sp_dif_getProductos 2,10, 2

    @posicion Es lo que en las consulta decimos los 'primeros', 'los segundos' productos. es la posicion del grupo de productos

    @cantidad es el tamaño de cada grupo de productos.

    @linea es el id o clave de la linea que queremos de los productos */

CREATE PROCEDURE dbo.sp_dif_getProductos(@posicion int, @cantidad int, @linea int ) AS begin     declare @resultado as int;

    select @resultado = ((@posicion-1)*@cantidad) ;          if ((@posicion >0) and (@cantidad>0) and (@linea >0))     begin         exec  ('         select top '+@cantidad +' *         from articulos a         where a.clinea='+@linea+'  and a.cstatus<>''c''            and a.carticulo not in (                         select top '+@resultado+' x.carticulo                         from articulos x                         where x.clinea='+@linea+' and x.cstatus<>''c''                         order by x.cdescrip                         )         order by a.cdescrip ; ')     end     else     begin         select -1,'Algun parametro es igual o menor a cero.';         return;     end end GO

 Jabber status mintaka comentó:

[Avatar]
  • #14
  • 22-8/03:01
<pre> /*     Autor Jesus rafael lopez ibarra

    sp_dif_getProductos procedimiento que regresa 'paginas' de productos ordenados por descripcion

    resuelve este tipo consultas:

    Dame los primeros 10 productos de la linea 2         sp_dif_getProductos 1,10, 2

    Dame los segundos 10 productos de la linea 2         sp_dif_getProductos 2,10, 2

    @posicion Es lo que en las consulta decimos los 'primeros', 'los segundos' productos. es la posicion del grupo de productos

    @cantidad es el tamaño de cada grupo de productos.

    @linea es el id o clave de la linea que queremos de los productos */

CREATE PROCEDURE dbo.sp_dif_getProductos(@posicion int, @cantidad int, @linea int ) AS begin     declare @resultado as int;

    select @resultado = ((@posicion-1)*@cantidad) ;          if ((@posicion >0) and (@cantidad>0) and (@linea >0))     begin         exec  ('         select top '+@cantidad +' *         from articulos a         where a.clinea='+@linea+'  and a.cstatus<>''c''            and a.carticulo not in (                         select top '+@resultado+' x.carticulo                         from articulos x                         where x.clinea='+@linea+' and x.cstatus<>''c''                         order by x.cdescrip                         )         order by a.cdescrip ; ')     end     else     begin         select -1,'Algun parametro es igual o menor a cero.';         return;     end end GO

</pre>

eljuli comentó:

  • #15
  • 9-10/04:23
Que no lo conozcas no significa que no exista. Mira la opcion propia de SQLServer llamada ROW_NUMBER()

Deja un comentario

Pulsa en los títulos para ver información sobre cómo comentar.

Autocompletado de nicks

Todos los campos del formulario son opcionales menos el del PIN.

Usa el tabulador para autocompletar los nicks de otros comentaristas.

Si escribes @ y pulsas la tecla tabulador varias veces podrás recorrer la lista de nicks usados

Y si escribes # (almoadilla) y número (Ej.: #5) se substituirá directamente el nick del comentario correspondienmte al pulsar el tabulador.

Tags HTML permitidos

Tags: a, strong, b, em, u, code, cite.

El tag a admite la propiedad href="..." para indicar la dirección.

Los tags también tienen autocompletado (al igual que los nicks). Para usarlos se pone por ejemplo strong + TABULADOR.

Formulario para comentar

Cargando...

Todo el contenido bajo el dominio XERGIO.NET está sujeto a la licencia Creative Commons con las condiciones BY-SA. Web estandarizada en XHTML 1.0, CSS 2, RSS 2 y Atom 1.0.