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 Vairon comentó:

[Avatar]
  • #1
  • 15-6/02:09
Zeru creo que deberias de decir las razones por las cuales osas a decir que "es una basura por muchas otras razones" y no dar los motivos o razones del por que como otras personas que al menos tienen argumentos de lo que dices asi que te sugiero que dejes a los grandes hacer lo que saben hacer

Marcos comentó:

  • #2
  • 25-7/20:36
USE [dbx] GO

SET ANSI_NULLS ON GO SET QUOTED_IDENTIFIER ON GO

CREATE PROCEDURE Pagina     @Table        VARCHAR(128)    = NULL,     @Filter        VARCHAR(1024)    = NULL,     @OrderBy    VARCHAR(128)    = NULL,     @PageIndex    INTEGER            = 0,     @PageSize    INTEGER            = 0 AS BEGIN

DECLARE @Filter2 AS VARCHAR(1024); SET @Filter2 = '';

IF @OrderBy IS NOT NULL BEGIN     SET @OrderBy = ' ORDER BY ' + @OrderBy; END ELSE BEGIN     SET @OrderBy = ' ORDER BY id'; END

IF @Filter IS NOT NULL BEGIN     SET @Filter2 = ' WHERE ' + @Filter;     SET @Filter = ' AND ' + @Filter; END

EXEC ( '     SELECT         *   FROM

   (      SELECT         ROW_NUMBER() OVER(' + @OrderBy + ') AS RowNum                 , t.*      FROM ' + @Table + ' AS t ' + @Filter2 + '    ) AS main    WHERE RowNum BETWEEN ((' + @PageIndex + ' - 1) * ' + @PageSize + ' + 1) AND (' + @PageIndex + ' * ' + @PageSize + ') ' ) END

Sebenscen comentó:

  • #3
  • 16-8/03:07
He aqui la solucion por la que todos se descabezan busquen mas y no se quejen tanto que si miramos motor por motor todos son excelentes.

DECLARE @rowA INT DECLARE @rowB INT SET @rowA = 5 SET @rowB = 10 SELECT TOP (@rowA+1)   id_comentario,   autor_comentario FROM   (    SELECT TOP (@rowB)     id_comentario,     autor_comentario    FROM     comentarios    ORDER BY     id_comentario   ) i ORDER BY   id_comentario DESC

ar7uro comentó:

  • #4
  • 3-9/18:37
sergio oracle y mssql son las unicas bases de datos existentes serias, las demas son juguetitos. en serio, no puedes comparar mssql con mysql, ni word con wordpad y mucho menos "C++" con "Logo".

Tu diras pero en "Logo" es mas facil dibujar una linea, pero definitivamente sabemos que C++ es mejor, ¿o no?

A nadie se le ocurre comparar mssql con mysql. No quiero ser mala onda, ni mucho menos burlon, pero quedas mal con comentarios asi. Disculpa si mi opinion te ofende.

Sobre cual es mejor: ORACLE o MSSQL, ahi si, entremos a discutir.

chao, saludos

ar7uro comentó:

  • #5
  • 3-9/18:46
"Y, además, estoy harto de lidiar con los talibanes de Linux. A ver qué día comienzan [comenzáis] a distinguir entre el mundo real y el maravilloso universo de bondad y felicidad que imagináis"

LO MAXIMO GIJON!!! :)

 Jabber status xergio comentó:

[Avatar]
  • #6
  • 3-9/22:04
Y porqué yahoo ysa mysql en su buscador y va rápido? y porqué digg usa mysql? o meneame? si es taaaan malo, porqué a ellos les va bien? y porqué los uqe usan mssql necesitan máquinas de la leche para que vayan bien? :)

Seguro que yo quedo mal afirmando que mssql tiene limitaciones? xD

Toni B. comentó:

  • #7
  • 15-9/20:03
Muy buenas a todos. En vista de esta miniguerra que está habiendo entre distintos servicios de SQL, quiero añadir algo:

Microsoft 'loquesea' es de ¡PAGO! Ya sabéis, licencias y tal. Microsoft compartió con Sybase el trabajo (o sea, trabajaba la última), por lo que su base de datos fue MUY BUENA hasta la 6.5, cuando todavía la manejaban entre ambos. Versiones a partir de la 7 eran puramente de Microsoft y no son malas, pero en fin, conocemos a éstos y no hace falta decir lo que hacen con los estándares y con el mercado, ¿no?

MySQL y PostgreSQL son unas alternativas libres que, cuando las pruebas y ves cómo funcionan -si importas base de datos y funcionan-, no te hace falta volver al MSSQL. Y quien ordena y manda apenas usa la interfaz gráfica bonita. ¿¿Y pa qué tanto cilindro y Cv, si sólo ha de viajar un trozo de carne/consulta?? Lo que cuenta no es la máquina, sino el manejo y metodología de búsqueda. Prefiero un Seat Toledo rapidillo de 5 plazas que no un biplaza de 500Cv.

Oracle: No quiero decir nada sobre la mejor y más cara del mundo.

Pd: No os metáis con los linuxeroos que van a más, aunque MS ""expresse"" sus programas (jajaja)

MR MSSQL comentó:

  • #8
  • 11-2/03:50
MYSQL ES B-A-S-U-R-A por donde la veas Si alguien la usa es poque no tiene dinero o es demasiado mezquino para comprar Oracle o MSSQL, cuantas empresas usan mysql? cuantas usan mssql? cuantas usan oracle? entonces todos estan mal por pagar y deben usar mysql? es B-A-S-U-R-A

Gabo comentó:

  • #9
  • 4-3/14:33
Mirá, yo estoy cansado de maldecir los productos de Micro$oft por deficiencias o errores que no deberían tener los productos de una empresa como esa... Aún así, en este momento me estoy encontrando con el mismo problema que planteás, pero creo que "NO SE PUEDE" no es una respuesta en este caso, si no se pudiera hacer eso no lo hubieran vendido el servidor de bases de datos a NADIE, debe haber alguna forma... Seguro que es un quilombo, pero que la hay... seguro que la hay.

Saludos.  

 Jabber status Kristel comentó:

[Avatar]
  • #10
  • 5-3/04:29
Ne sar

 Jabber status Scott comentó:

[Avatar]
  • #11
  • 14-3/12:07
Partito http://www.plastprintpack.com/comune-napoli-it suo,.

 Jabber status Karen comentó:

[Avatar]
  • #12
  • 15-3/05:11
De ha <a href='http://www.tizakiform.com/canale' >canale invece.

 Jabber status Karen comentó:

[Avatar]
  • #13
  • 15-3/05:11
Stato in <a href='http://www.tizakiform.com/canale' >come canale.

 Jabber status Juan comentó:

[Avatar]
  • #14
  • 15-3/18:59
Fine fare <a href='http://www.tizakiform.com/ragazza-single' >la ragazza single,.

 Jabber status Mark comentó:

[Avatar]
  • #15
  • 16-3/09:55
Cui http://www.celebrateliterarybelfast.com/voli-nazionali detto.

 Jabber status Stan comentó:

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

 Jabber status Mark comentó:

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

 Jabber status Mark comentó:

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

 Jabber status fher comentó:

[Avatar]
  • #19
  • 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]
  • #20
  • 6-4/08:27
Sar

 Jabber status Hulita comentó:

[Avatar]
  • #21
  • 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]
  • #22
  • 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]
  • #23
  • 14-4/08:46
Quasi centro <a href='http://www.chatterie-grandtomahawk.com/auto-modena.php' >modena auto sua.

SQL MAN comentó:

  • #24
  • 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ó:

  • #25
  • 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ó:

  • #26
  • 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]
  • #27
  • 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]
  • #28
  • 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]
  • #29
  • 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ó:

  • #30
  • 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.