FTP | CCD | Buscar | Trucos | Trabajo | Foros |
|
Registrarse | FAQ | Miembros | Calendario | Guía de estilo | Temas de Hoy |
|
Herramientas | Buscar en Tema | Desplegado |
#1
|
||||
|
||||
Respuestas universales sobre SQL/Base de datos
Viendo que cada vez hay más preguntas sobre SQL/bases de datos y el marcado desconocimiento sobre cómo usarlo, que es un producto del uso extendido de ORMs, NoSql y demás herramientas que intentan "abstraer" el acceso a datos, algunos tips para el que quiera mejorar en su uso de motores de base de datos relacionales.
Respuestas universales: 0. Tengo un problema y voy a preguntar en el club. ¿Por qué no me están respondiendo? Luego de leer la guía de estilo general, no podremos responderte sin TUS DATOS ORIGINALES. Recuerda que un programa es ENTRADA -> PROCESO -> SALIDA. Casi todas las preguntas aquí la gente muestra PROCESO -> SALIDA. Sin un ejemplo de las tablas/datos originales ANTES de ejecutar el proceso no hay cómo resolver nada de nada. Es como si te pregunto: Cita:
Para poder reproducir el problema, es ideal usar http://sqlfiddle.com/ con un ejemplo de los datos/indices y la consulta usada. De no poderse, usa https://gist.github.com/ o cualquier otro medio para mostrar los datos. Tambien vale ponerlos en un tag SQL del foro si es relativamente simple la tabla(s) de origen de los datos. Recuerda: Un problema que no se puede reproducir no tiene como arreglarse. 1. ¿Cual motor de base de datos usar? - Firebird/sqlite para bases de datos embebidas, que no requieran instalarse como un servidor/app aparte, o como BD de clientes desconectados/mobiles/remotos que sincronizan o tienen un sub-conjunto de los datos del motor primario. - PostgreSql como motor primario. Es el más completo en funcionalidad y soporte al estándar SQL, estable, eficiente y con un gran ecosistema de herramientas y sub-engines para cubrir una gran cantidad de casos de uso, como el de reportería, minería de datos y demás. Tiene una EXCELENTE documentación. MS Sql Server está muy bien como motor comercial, y Firebird es una excelente opción. MySql es más complicado en su enorme variedad de versiones, engines, licenciamiento y facilidad de cometer errores invisibles que requieren entendimiento de las idiosincracias del motor. A menos que se tenga la experiencia, PostgresSQL es mucho más fiable y hay MUY POCOS escenarios donde mysql es realmente mejor. ABSOLUTAMENTE dejar atrás motores obsoletos como paradox, dbase, access y similares. Si no tienes una buena razón para ello, son por mucho la peor opción al dia de hoy. Motores NoSql SON PARA NICHOS ESPECIFICOS y a menos que REALMENTE entiendas cuándo y el porqué usarlos, es mejor apegarse a un RDBMS tradicional. En especial, cualquier motor que NO SEA ACID ES UN DOLOR DE CABEZA GARANTIZADO. Si crees que eres muy listo porque ese motor NoSql es muy "escalable" (que normalmente es cierto) pero SQL te da dificultad, es garantizado que menos deberías usar NoSql. Y por ultimo: USA LA ULTIMA VERSION ESTABLE DEL MOTOR. No tiene NADA de sentido usar una version antigua, con la única excepción de que ese motor no lo controlas y simplemente estás teniendo acceso a él. Si es uno de tus clientes, recomienda actualizarse tan pronto sea posible. Un RDBMS hay que tratarlo con MÁS RESPETO Y AMOR que el SO. Las versiones recientes tienen muchas mejoras, parches y demás que no quieras perderte. 2. ¿Por qué esto no me sale como quiero ...? La mayoría de los problemas con SQL a la hora de obtener un resultado es ignorar que es un lenguaje completo y que sigue un paradigma DIFERENTE al orientado a objetos. Debido a su sencillez general es fácil lograr resultados inmediatos pero sin algo de estudio, muy difícil de resolver tareas mas complejas. Así que: - Lee sobre el modelo relacional: http://infolab.stanford.edu/~ullman/focs/ch08.pdf Ya que si sigues mirando la BD con ojos de programador OO estarás perdiendo la facilidad y eficiencia que te puede dar. - Lee la documentación de SQL de tu motor. Si tu motor tiene documentación deficiente, lee la de PostgreSql, que debido a que sigue una cercana implementación del estándar de SQL es lo mas próximo a un dialecto universal: https://www.postgresql.org/docs/10/static/index.html Una vez hayas aprendido un dialecto y la idea general, adaptarse es trivial. De aquí, es aprender las idiosincracias del motor y cómo se administra (crear usuarios, hacer backup, etc). - El sql "tradicional" está basado en el estándar ANSI SQL 92, o sea 1992. Eso es vieeeejo. Algo habrá avanzado la industria en estos años ¿no? Los avances de última generación permiten resolver muchos problemas que antes eran muy complicados: https://modern-sql.com/ En resumen: No esperes que tu motor de bases de datos te funcione y la vez ignorar aprender sobre él y SQL. 3. ¿Cómo hago que mi consulta sea más rápida (o cómo hago que dé resultados esperados)? Al igual que con el código general, el proceso de optimizar y el de hacer que funcione es casi el mismo: - Hazlo simple - Hazlo correcto - Hazlo rapido Lo MÁS MÁS importante es modelar tus tablas correctamente. Lo que significa, entender cómo normalizar Y denormalizar los datos, cómo nombrar las tablas, campos... cómo aplicar los índices adecuados, el uso de vistas, funciones & triggers para abstraer la BD (o sea: así como usas clases, funciones y eventos en código OO para abstraer el código, usas vistas, funciones & triggers para abstraer la BD). Mientras que esto parece complejo, es MUCHISIMO más sencillo que hacer el código de un lenguaje OO. Las tablas son MUY visuales: Cita:
--- Para entender a tus consultas tienes que entender cómo funciona un RDBMS, que en resumen es más entender cómo funcionan los indices: https://use-the-index-luke.com/ Y TODAS TUS PREGUNTAS A "¿POR QUÉ MI CONSULTA ES LENTA?" las resuelve el query planer. Por lo tanto al organizar los datos correctamente y aplicar lo que query planer nos dice, tendremos una BD rápida y eficiente. En resumen, estos son los pasos para una BD rápida: 1- Buen diseño de las tablas 2- Uso de índices correctamente 3- Investigar con el query planer cuando algo sea lento y por demás: 4- Usa la última versión de tu BD. Actualízate, por el amor de Dios. En especial si ¡usas un motor gratuito! 4a - y lo mismo al SO. No te quejes si tu servidor sigue en Windows XP. 5- Pon tanta RAM como puedas en tu servidor 6- Pon la BD en un disco SSD, idealmente un SSD para servidores.
__________________
El malabarista. Última edición por mamcx fecha: 22-08-2018 a las 18:23:45. Razón: "Afinar" un poquito la presentación para que quede "perfecto" :P |
#2
|
||||
|
||||
Lectura obligada
__________________
La otra guía de estilo | Búsquedas avanzadas | Etiquetas para código | Colabora mediante Paypal |
#3
|
||||
|
||||
¿Cómo es posible que se me haya pasado este hilo? Me lo guardo pero ya.
Muchichísimas gracias. |
#4
|
||||
|
||||
Maravillosa lectura. Gracias.
|
|
|
Temas Similares | ||||
Tema | Autor | Foro | Respuestas | Último mensaje |
10 respuestas sobre el fin de Windows XP | nlsgarcia | La Taberna | 24 | 16-04-2014 14:26:39 |
bibliografía sobre base de datos | juaarias | Conexión con bases de datos | 11 | 23-11-2011 00:08:25 |
dudas sobre base de datos | Erkorud | Conexión con bases de datos | 2 | 18-08-2005 12:00:13 |
Base de Datos sobre VPN | softdelphi | Conexión con bases de datos | 3 | 20-09-2004 10:15:48 |
Operaciones sobre base de datos | davidgaldo | Conexión con bases de datos | 4 | 31-03-2004 11:50:07 |
|