Tutoriales de mysql

En Jaslabs han publicado un interesante listado de consejos y tips para optimizar las consultas MySQL . Aquí las traducimos y ampliamos.

1. Usar el comando Explain

El comando Explain explica como se lleva a cabo una consulta SELECT, como se usan los índices y como se unen las tablas. La forma de utilizarlo es la siguiente:

Explain select * from tabla

Ahora, en lugar de ejecutar la consulta, se mostrará un listado con la información ya mencionada anteriormente. Esto es muy útil para optimizar las consultas. Más información.

2. Usar permisos poco complejos

Por defecto, el usuario que utilizamos para conectar nuestra aplicación a la Base de datos, goza todos los permisos MySQL . Sin embargo, el utilizar un usuario con sólo los permisos necesarios (para la publicación, por ejemplo), permiten a  MySQL reducir la comprobación de cada uno de los permisos, cada vez que el cliente MySQL ejecute las sentencias (INSERT, por ejemplo).

3. Hacer BENCHMARK() a nuestras expresiones

Si tenemos un problema de rendimiento con una expresión que ya hemos identificado, una excelente manera de comprobar su optimización es utilizando la función benchmark(). Su sintaxis es la siguiente:

BENCHMARK(loop_count,expression)

Esta función siempre devuelve un valor cero, pero además imprime el tiempo que se ha demorado en el cliente final (no el tiempo de CPU en el servidor). Más información .

4. Optimizar la cláusula WHERE

Estos son algunos consejos para optimizar WHERE:

  • Remover los paréntesis innecesarios. Por ejemplo: DE (a<b AND b=c) AND a=5 A b>5 AND b=c AND a=5. Más información.
  • COUNT(*) esta optimizado para devolver un SELECT de manera mucho más rápida, siempre y cuando sea a una tabla y sin usar WHERE. Por ejemplo: SELECT COUNT(*) FROM tabla
  • La opción SQL_SMALL_RESULT , puede usarse con GROUP BY o DISTINCT para indicar que el conjunto de resultados es pequeño. En este caso, MySQL utiliza tablas temporales muy rápidas para almacenar la tabla resultante en lugar de usar ordenación.

5. Utilizar la sentencia OPTIMIZE TABLE

OPTIMIZE TABLE debe usarse si se ha eliminado gran parte de la tabla o si se han hecho varios cambios en la misma. Optimize Table desfragmenta la tabla, la repara y la ordena. Más información.

6. Evitar los tipos de columna de longitud variable

Los campos con longitud fija (CHAR, por ejemplo) son más rápidos que los de longitud variable (VARCHAR, por ejemplo). Pero, como contrapartida, ocupan más espacio en disco. Aún así, para las tablas MyISAM, se recomienda evitar el uso de las columnas de longitud variable (VARCHAR, BLOB, and TEXT).

7. Insert Delayed

Se recomienda utilizar INSERT DELAYED cuando los clientes no pueden esperar a que el INSERT se complete ó cuando no sea necesario conocer que los datos han sido escritos correctamente.

Cuando se usa INSERT DELAYED, se obtiene una confirmación inmediata por parte del servidor. La data se almacena en una cola para ser insertada cuando la tabla no esté en uso por ningún otro proceso. Además, los INSERT en cola son agrupados en bloques lo que aumenta la rapidez de su ejecución.

8. Priorizar las sentencias

Aquí explicamos dos maneras:

  • Utilizar INSERT LOW_PRIORITY en los INSERT, cuando se desee priorizar las consultas SELECT sobre las INSERT. El INSERT debe esperar hasta que no hayan otros clientes leyendo la tabla.
  • Utilizar SELECT HIGH_PRIORITY en los SELECT, para priorizarlos sobre cualquier otro comando que se ejecute simultáneamente, ya sea para añadir o actualizar datos en la tabla.

9. Insertar filas múltiples

Es recomendable ejecutar un insert multiple a varios inserts distintos. La sintaxis es:

INSERT INTO table (col1, col2) VALUES ('value1', 1), ('value2', 2), ('value3', 3)

10. Sincronizar tipos de datos

La idea es la siguiente. Si se tienen columnas que van a almacenar la misma información, pero están en distintas tablas, es aconsejable que sean del mismo tipo de datos. De esta manera, los JOINS que se ejecuten entre ellas, serán mucho más rápidos.

Autor: Baluart
Introducción

Las consultas de selección se utilizan para indicar al motor de datos que devuelva información de las bases de datos, esta información es devuelta en forma de conjunto de registros que se pueden almacenar en un objeto recordset. Este conjunto de registros es modificable.

Consultas básicas

La sintaxis básica de una consulta de selección es la siguiente: select Campos from Tabla;
En donde campos es la lista de campos que se deseen recuperar y tabla es el origen de los mismos, por ejemplo:



select Nombre, Telefono from Clientes;


No es recomendado utilizar los prefijos ALL o *, ya que obligamos al motor de la base de datos a analizar la estructura de la tabla para averiguar los campos que contiene, es mucho más rápido indicar el listado de campos deseados.



select ALL from Empleados;
select * from Usuarios;


Ordenar los registros

Adicionalmente se puede especificar el orden en que se desean recuperar los registros de las tablas mediante la claúsula order by Lista de Campos. En donde Lista de campos representa los campos a ordenar. Ejemplo:



select CodigoPostal, Nombre, Telefono from Clientes order by Nombre;


Esta consulta devuelve los campos CodigoPostal, Nombre, Telefono de la tabla Clientes ordenados por el campo Nombre.

También se puede especificar el orden de los registros: ascendente mediante la cláusula (ASC -se toma este valor por defecto) ó descendente (DESC)



select CodigoPostal, Nombre, Telefono from Clientes order by 
CodigoPostal DESC , Nombre ASC;


Cláusula WHERE

Esta cláusula se utiliza para establecer condiciones en cualquier instrucción, en select se utiliza para filtrar los registros que queremos que se seleccionen, de esta manera el resultado solo será de los registros que cumplan la condición especificada.



select Apellidos, Salario from Empleados where Salario > 21000;
select Apellidos, Nombre from Empleados where Apellidos = 'King';
select Apellidos, Salario from Empleados where Salario Between 200 And 300;
select * from Empleados where (Sueldo > 100 AND Sueldo < 500) OR 
(Provincia = 'Madrid' AND Estado = 'Casado');


Between: Indica que queremos recuperar un intervalo de valores de un campo.

Todas las condiciones se pueden mezclar para formar consultas que devuelvan solo los datos que requieras.

Autor: Gamaliel M.
Introducción

Primero tendremos que crear la base de datos, para esto utilizaremos el comando CREATE DATABASE, que nos permitirá hacer la base de datos.



CREATE DATABASE name_db ;


Una vez creada la base de datos podremos agregarle tablas, para ello seguiremos utilizando el comando CREATE, pero ahora le agregaremos TABLE, veamos el código.



CREATE TABLE name_db (
  id INT NOT NULL ,
  name VARCHAR( 40 ) NOT NULL ,
  surname VARCHAR( 40 ) NOT NULL ,
  age VARCHAR( 5 ) NOT NULL ,
  country VARCHAR( 60 ) NOT NULL
) ENGINE = MYISAM ;


Con este código creamos una tabla básica, si al identificador (id) lo queremos hacer auto incrementable y llave primaria, entonces en el campo id le agregamos AUTO_INCREMENT y PRIMARY KEY.
El código quedaría:



CREATE TABLE aa(
  id int NOT NULL AUTO_INCREMENT PRIMARY KEY ,
  name varchar( 40 ) NOT NULL ,
  surname varchar( 40 ) NOT NULL ,
  age varchar( 5 ) NOT NULL ,
  country varchar( 20 ) NOT NULL
) ENGINE = MYISAM 


Tipos de Datos

Los tipos de datos SQL se clasifican en 13 tipos de datos primarios y de varios sinónimos válidos reconocidos por dichos tipos de datos.

Tipo de Datos Longitud Descripción
BINARY 1 byte Para consultas sobre tabla adjunta de productos de bases de
datos que definen un tipo de datos Binario.
BIT 1 byte Valores Si/No ó True/False
BYTE 1 byte Un valor entero entre 0 y 255.
COUNTER 4 bytes Un número incrementado automáticamente (de tipo Long)
CURRENCY 8 bytes Un entero escalable entre 922.337.203.685.477,5808 y
922.337.203.685.477,5807.
DATETIME 8 bytes Un valor de fecha u hora entre los años 100 y 9999.
SINGLE 4 bytes Un valor en punto flotante de precisión simple con un
rango de -3.402823*1038 a -1.401298*10-45 para valores
negativos, 1.401298*10-45 a 3.402823*1038 para valores
positivos, y 0.
DOUBLE 8 bytes Un valor en punto flotante de doble precisión con un rango
de -1.79769313486232*10308 a -4.94065645841247*10-324
para valores negativos, 4.94065645841247*10-324 a
1.79769313486232*10308 para valores positivos, y 0.
SHORT 2 bytes Un entero corto entre -32,768 y 32,767.
LONG 4 bytes Un entero largo entre -2,147,483,648 y 2,147,483,647.
LONGTEXT 1 byte por
carácter
De cero a un máximo de 1.2 gigabytes.
LONGBINARY Según se
necesite
De cero 1 gigabyte. Utilizado para objetos OLE.
TEXT 1 byte por
caracter
De cero a 255 caracteres.
Autor: Gamaliel M.
Introducción

El lenguaje de consulta estructurado (SQL) es un lenguaje de base de datos normalizado, utilizado por el motor de base de datos de Microsoft Jet. SQL se utiliza para crear objetos QueryDef, como el argumento de origen del método openRecordSet y como la propiedad RecordSource del control de datos. También se puede utilizar con el método Execute para crear y manipular directamente las bases de datos Jet y crear consultas SQL de paso a través para manipular bases de datos remotas cliente - servidor.

El lenguaje SQL está compuesto por comandos, cláusulas, operadores y funciones de agregado. Estos elementos se combinan en las instrucciones para crear, actualizar y manipular las bases de datos.

Comandos

Existen dos tipos de comandos SQL:

* Los DLL que permiten crear y definir nuevas bases de datos, campos e índices.



Comando                 Descripción
CREATE             Utilizado para crear nuevas tablas, campos e índices
DROP               Empleado para eliminar tablas e índices
ALTER              Utilizado para modificar las tablas agregando campos 
                   o cambiando la definición de los campos.


* Los DML que permiten generar consultas para ordenar, filtrar y extraer datos de la base de datos.



Comando                 Descripción
SELECT             Utilizado para consultar registros de 
                      la base de datos que satisfagan un criterio determinado
INSERT             Utilizado para cargar lotes de datos en la base de datos 
                   en una única operación.
UPDATE             Utilizado para modificar los valores de 
                   los campos y registros especificados
DELETE             Utilizado para eliminar registros de una tabla de una 
                   base de datos


Cláusulas

Las cláusulas son condiciones de modificación utilizadas para definir los datos que desea seleccionar o manipular.



Cláusula                  Descripción
FROM                Utilizada para especificar la tabla de la cual 
                      se van a seleccionar los registros
WHERE               Utilizada para especificar las condiciones que 
                    deben reunir los registros que se van a seleccionar
GROUP BY            Utilizada para separar los registros 
                    seleccionados en grupos específicos
HAVING              Utilizada para expresar la condición que debe 
                    satisfacer cada grupo
ORDER BY            Utilizada para ordenar los registros seleccionados 
                    de acuerdo con un orden específico


Operadores Lógicos

Operador                 Uso
AND                 Es el "y" lógico. Evalúa dos 
                    condiciones y devuelve un valor true 
                    sólo si ambas son ciertas.
OR                  Es el "o" lógico. Evalúa dos 
                    condiciones y devuelve un valor true alguna de 
                    las dos es cierta.
NOT                 Negación lógica. Devuelve el valor 
                    contrario de la expresión.


Operadores de Comparación

Operador                 Uso
<                       Menor que
>                       Mayor que
<>                      Distinto de
<=                      Menor ó Igual que
>=                      Mayor ó Igual que
=                       Igual que
BETWEEN                 Utilizado para especificar un intervalo de valores.
LIKE                    Utilizado en la comparación de un modelo
In                      Utilizado para especificar registros de una base de datos


Funciones de Agregado

Las funciones de agregado se usan dentro de una cláusula select en grupos de registros para devolver un único valor que se aplica a un grupo de registros.



Función                   Descripción
AVG                       Utilizada para calcular el promedio de los valores 
                          de un campo determinado
COUNT                     Utilizada para devolver el número de 
                          registros de la selección
SUM                       Utilizada para devolver la suma de todos los 
                          valores de un campo determinado
MAX                       Utilizada para devolver el valor más 
                          alto de un campo especificado
MIN                       Utilizada para devolver el valor más 
                          bajo de un campo especificado


Autor: Gamaliel M.