Funcin 13
Inicio
Portafolio
Aplicaciones
Libros
Blog
Contacto
B u s c a r . . . Hace unos das, recib un comentario en el artculo en el que se explican los JOINs de forma visual y concisa, de alguien que estaba preocupada por la optimizacin en SQL y me pareci muy interesante! Recuerdo haber hecho bastante trabajo de optimizacin en Accenture, reduciendo tiempos de carga de 40 segundos para una consulta a un par de segundos. As que, como siempre, voy a intentar compartir ese conocimiento. Ten en cuenta que hay consejos que aplican solo a la arquitectura de la base de datos, otros que solo al desarrollo de consultas, y otros que sirven para ambos casos.
Buscar
Valor
C H A R( 5 )
' ' ab
' ' a b
' '
' a b c d e '
' a b c d e '
5 bytes
' a b c d e '
6 bytes
(/codebright-es? utm_campaign=codebrightes&utm_medium=embed&utm_source=w
Como ves, a tamao completo, no tiene mucho sentido guardar un v a r c h a r de 5 caracteres teniendo en cuenta que, si siempre va a ocupar lo mximo, ocupar ms que si fuera un c h a r.
C R E A T ET A B L Eu s u a r i o s{ i dI N Tu n s i g n e dn o tn u l la u t o _ i n c r e m e n t , u s u a r i oV A R C H A R ( 2 0 )n o tn u l l , p a s s w o r dV A R C H A R ( 4 0 )n o tn u l l , e m a i lV A R C H A R ( 4 0 ) ,
www.funcion13.com/2013/04/22/consejos-para-optimizar-tus-consultas-y-tablas-sql/
1/6
20/12/13
P R I M A R YK E Y ( i d ) } C R E A T ET A B L Ed a t o s _ u s u a r i o{ i d _ u s u a r i oI N Tu n s i g n e dn o tn u l l , i d _ d e p a r t a m e n t oI N Tu n s i g n e d , f e c h a _ n a c i m i e n t oD A T E , d n iC H A R ( 9 ) , P R I M A R YK E Y( i d _ u s u a r i o ) }
Los datos que usamos frecuentemente los mantenemos en una tabla mientras que los que usamos con menos frecuencia los dejamos en otra, esto har que la tabla menos frecuente ocupe menos memoria.
(/descubriendonodejs-express? utm_campaign=descubriendonodejsexpress&utm_medium=embed&utm_sour
Descubriendo Node.js y Express (/descubriendonodejs-express? utm_campaign=descubriendonodejs-
Ultimos comentarios
Nada de SELECT *
A menudo, especialmente durante el desarrollo, nos vemos tentados a escribir S E L E C T * para cualquier consulta en la que nos traigamos datos de una tabla. Esto es un error en la mayora de las ocasiones ya que estars trayendo datos que, probablemente, no necesites. Lo que es aun peor es que la tabla puede crecer en nmero de columnas en el futuro, lo cual implica que traers aun ms datos que no necesitars. Limita las consultas a las columnas que necesites.
Xavier_Xyron Amigo, no tienes el archivo en rar o en zip ? Lo que sucede es que no consigo adaptarlo a mi proyecto, tan slo en ste en particular. Ocultando y mostrando mltiples marcadores en Google Maps 3 days ago
S E L E C Tu s u a r i o F R O Mu s u a r i o s W H E R Ei dI N( S E L E C Ti d F R O Md a t o s _ u s u a r i o W H E R Ed e p a r t a m e n t o=1 )
S E L E C Tu s u a r i o s . u s u a r i o F R O Mu s u a r i o s I N N E RJ O I Nd a t o s _ u s u a r i oO Nu s u a r i o s . i d=d a t o s _ u s u a r i o . i d W H E R Ed a t o s _ u s u a r i o . d e p a r t a m e n t o=1 ;
Antonio Traverso Fabuloso el sistema, pero arroja un error. Cuando uno pincha el enlace de que la pgina fallar, en efecto, todos los enlaces comienzan a dar problemas. Era ese el objetivo???? O.o No lo creo.... Sencilla web con navegacin AJAX en jQuery 5 days ago
Este es un error bastante comn para los iniciados al SQL ya que la primera consulta es ms
www.funcion13.com/2013/04/22/consejos-para-optimizar-tus-consultas-y-tablas-sql/
2/6
20/12/13
natural para el programador.
Gustavo Muchas gracias. Me ha sido de enorme utilidad. Funciones tiles de MySQL (Primera parte) Fecha y Hora 1 week ago
Esto nos dara todos los Juan Antonio, Juan Roberto, Juan Ildefonso, Juanjos, etc que tengamos en la base de datos pero el coste de la operacin es bastante elevado. Intenta evitar que tus aplicaciones realicen este tipo de operaciones. Y t, qu consejos daras para optimizar tus consultas? Recuerda que, si el artculo te pareci interesante, til o incluso equivocado, por favor considera el dejar un comentario. Lo apreciar mucho! diego Hola como estas? sabes si el marcador tiene una propiedad color? gracias Google Maps Marcadores 2 weeks ago
7
Me gusta
De inters
BuSeVici Informacin sobre autobuses y bicicletas en Sevilla desde cualquier mvil: iPhone, Android o BlackBerry Domine las aplicaciones mviles con jQuery Mobile
10
Tw ittear
Sobre el autor
Antonio Laguna
Programador Front-end en Gamesys. Trabajando con JavaScript y HTML5 desde el corazn de Londres
Hazte con la traduccin de este completo libro para aprender a usar jQuery Mobile jQuery ColorPicker Pequeo plugin para generar un selector de colores a lo Photoshop jQuery Translator Pequeo plugin que te ayudar en la traduccin de sitios webs estticos.
Entradas relacionadas
Localizador de tiendas con PHP, jQuery Mobile y MySQL Parte 2 11 marzo, 2013 Auto-actualizacin de TIMESTAMP en MySQL con triggers 26 diciembre, 2012 Explicacin visual de los JOINs de SQL 16 mayo, 2012
Entradas populares
Cmo realizar peticiones AJAX cross-domain usando JSONP y jQuery 12 abril, 2012 Ocultando y mostrando mltiples marcadores en Google Maps 8 septiembre, 2012
Resuelve tus dudas Pregunta tus dudas sobre los temas que tratamos en este Blog. Si es interesante y no ha sido tratado, quiz lo tratemos en el blog!
Categoras
Administracin (1) Apache (1) Aplicaciones web (2) CSS3 (1) Diseo (1)
Lista de elementos ordenables y editables usando HTML5, jQuery, PHP y MySQL 8 febrero, 2012
www.funcion13.com/2013/04/22/consejos-para-optimizar-tus-consultas-y-tablas-sql/
3/6
20/12/13
nete a la discusin...
Antiguos Comunidad
hace 8 meses
jQuery (20) jQuery Mobile (8) MySQL (4) Noticias (14) Personal (2) PHP (12) Programacin (28) Seguridad (2) SQL (4) Tecnologa (1)
Hola, muy bueno el artculo. Estoy de acuerdo en el punto donde dices que se eviten los filtros de texto, pero hay veces que tienes que usar algo de ese tipo porque la informacin viene muy mal o para bsquedas acercadas o parecidas. Mi pregunta es: Sera mejor utilizar un substring o sera lo mismo que utilizar el like?? Ejemplo: SELECT desc_mens FROM cat_estatus_mensaje WHERE desc_mens LIKE 'CON%'; Cambiarlo por esto: SELECT desc_mens FROM cat_estatus_mensaje WHERE substr(desc_mens, 0, 3) = 'CON';
Responder Compartir
A nt onio Laguna
M o d e ra d o r
Hola Leticia! En mi opinin es mejor usar substring para comparar texto completo, puedes incluso meter un ndice con ese substring si siempre vas a comparar por ejemplo los 3 primeros caracteres (como es tu caso) lo cual hara la bsqueda aun ms rpida. Por norma general, una consulta basada en texto completo es ms rpida que usar likes.
Responder Compartir
hace 8 meses
Hola Antonio, me parece muy bueno, interesante y ameno el artculo. Gracias. Un detalle, que quiz me equivoque: Cuando dices que el varchar 'abcd' ocupa 6 bytes... no seran 5? Un saludo.
Responder Compartir
A nt onio Laguna
M o d e ra d o r
Hola David, si fuera 'abcd' estara ocupando 5 bytes lo que pasa es que deba tener hambre y me com la e... Ya est corregido y le he puesto un poco de formato para que no se borren los 5 espacios que ocurren si guardas una cadena vaca en un campo CHAR(5) Muchas gracias por avisar!
1 A na
Responder Compartir
hace 8 meses
De verdad ayudan mucho este tipo de tecnicas por debajo para una mejor respuesta de la base. Buen post, Muchas Gracias!
Responder Compartir
A nt onio Laguna
M o d e ra d o r
www.funcion13.com/2013/04/22/consejos-para-optimizar-tus-consultas-y-tablas-sql/
4/6
20/12/13
1 abelinux
Responder Compartir
hace 8 meses
Yo hago a menudo lo siguiente $sql=mysql_query("select * from tabla",$conexion1); while($row=mysql_fetch_array($sql)){ $sql2=mysql_query("select * from tabla2 where campo=$row[0]",$conexion2); $row2=mysql_fetch_array($sql2); } Se que est mal hacerlo porque la solucin mas obvia es dejarlo en una consulta, pero con esto he logrado traer datos de bases diferentes o inclusive servidores diferentes ya q cada SQL permite especificar una conexin diferente. No lo hagan a menos que no tengan muchos datos.
Responder Compartir
A nt onio Laguna
M o d e ra d o r
Eso no es nada recomendable, pero nada nada nada. Te arriesgas a sobrecargar el programa en menos que canta un gallo.
Responder Compartir
ruben
hace 5 meses
hace 4 meses
y oc men
hace 4 meses
Realmente interesante este artculo, una de las grandes dudas cada vez que realizo un proyecto web esta justamente es esas bsquedas de texto, por ejemplo si tengo la tabla usuarios y tiene un campo nombre, otro apellido y nombre de usuario, para realizar una bsqueda que me coincida el nombre el apellido o el nombre de usuario, como debera de realizarla? con subtring lo intente una vez pero no me resulto o no supe implementarla ya que debes indicar la cantidad de caracteres a cotejar y si busco a todos los manuel y le pongo por ejemplo 3 conseguira a todos los man, pero si coloco por ejemplo ma no me funcionaba tampoco como quera, entonces que me recomendaras para este tipo de bsquedas? muchas gracias desde ya por toda la ayuda que aportas.
Responder Compartir
TAMBIN EN FUNCIN 13
Q U E S E S T O ?
Me uno a gamesys
4 comentarios hace 9 meses
comentario pero no lo veo. Lo habr hecho mal. Lo dejo otra vez.Deca que
saber que tienes grandes aspiraciones. En esta vida hay que pelearla para
Su s crb e te
A a d e D i s q u s a tu s i ti o w e b
www.funcion13.com/2013/04/22/consejos-para-optimizar-tus-consultas-y-tablas-sql/
5/6
20/12/13
Ultimos posts
Un programador en Londres 9 octubre, 2013
En contacto
Envanos un correo
Nombre * Email *
Code Bright para Laravel 4, ya disponible en castellano 6 agosto, 2013 No te pierdas jQuery Plugin Registry #jqueryIO! 26 junio, 2013
Enviar
IN IC IO
POR TAFOL IO
BL OG
C ON TAC TO
www.funcion13.com/2013/04/22/consejos-para-optimizar-tus-consultas-y-tablas-sql/
6/6