Archivos de la categoría mysql

La selectividad de los índices en MySQL

Performance de base de datosAgrego la definición de selectividad respecto a índices en motores de bases de datos:

La selectividad es la relación que hay entre el número de valores posibles en una columna, y el número total de registros. La mejor selectividad es 1, y ocurre cuando hay tantos valores posibles como registros presentes, precisamente en el caso de una clave primaria sobre una columna; la peor selectividad es la que tiende a 0, y ocurre cuando hay muy pocos valores posibles en relación a los registros presentes, por ejemplo una columna sexo.

Sigue leyendo La selectividad de los índices en MySQL

Diferencias entre mysql, mysqli y PDO en PHP

Existen más, pero hay las tres formas más populares de conectarse desde PHP a una base de datos de MySQL: mysql, mysqli y PDO (PHP Data Objects). En cada proyecto se puede usar una manera u otra, pero para saber cuál es la más recomendada, hay que conocer en que se distinguen:

  • mysql es la API histórica que ofrece PHP desde hay varias versiones.
  • mysqli es la nueva versión de mysql, orientada a objetos.
  • PDO es una capa de abstracción de base de datos, con soporte para MySQL y otros sistemas gestores de bases de datos. Proporciona comandos preparados y otra serie de operaciones adaptadas al driver necesario.

Si no hubiera ningún motivo que hiciera variar la elección, se recomienda usar PDO; y si no es posible, entonces mysqli. Como último recurso, usar mysql. Visto en stackowerflow

ACTUALIZACIÓN (2010/08/01): En el foro "Foros del web", se abrío un hilo hace meses, hablando de los pros y contras sobre PDO o MySQLi. Desde ahí, se puede acceder a un artículo muy interesante del blog TuFunción: "PHP y MySql: una estrecha relación". Se muestran los resultados de unos test. para comprobar el rendimiento de los diferentes drivers. El driver MySqli demuestra un rendimiento de casi el doble respecto a PDO.

Las conclusiones del artículo son:

  • Rendimiento: MySqli o MySql
  • Características: MySqli
  • Facilidad de uso: PDO

Trabajando con el tipo de campo BIT de MySQL en PHP

BitsEl tipo de dato BIT en Mysql, antes de la versión 5.0.3 era almacenado como un TINYINT. En las versiones posteriores es utilizado para almacenar bits, y ya es soportado por los motores de almacenamiento MyISAM, Memory, InnoDB y NDBCluster. Al ser el tipo de dato de MySQL que se traduce como un booleano de los lenguajes de programación, es común usarlo para los campos en que almenamos información en que solo tiene dos estados: si es activo o no, si es apto o no, si es público o no, … No confundir con el tipo de datos BOOL, que en realidad es un TINYINT.

Sigue leyendo Trabajando con el tipo de campo BIT de MySQL en PHP

Función GROUP_CONCAT de MySQL

MySQL logoDescubrí el otro día la función GROUP_CONCAT, que puede ser muy útil cuando hacemos consultas a MySQL donde usamos el GROUP BY. Sirve para concatenar con un separador, todos los registros afectados por un GROUP BY en un solo campo de salida. Lo mejor es explicarlo con un ejemplo.

Tenemos dos tablas, Contenidos y Categorías (o cualquier relación típica de 1:N o N:N). El objetivo es sacar todos los contenidos, y en cada registro de contenidos, las categorías de cada uno de ellos.

Sigue leyendo Función GROUP_CONCAT de MySQL

Diferencias entre ENUM y SET en MySQL

MySQL AvanzadoExistes dos tipos de campo en MySQL que siempre los he visto iguales. He investigado un poco en sus diferencias y lo que voy a comentar sirve tanto para MySQL 5.1 como MySQL 5.4.

Tanto ENUM como SET, sirven para determinar los valores que puede tener un campo de una tabla, es decir, puedes determinar que en un campo solamente pueda contener valores de una lista definida por ti. La principal diferencia es que un campo del tipo ENUM siempre contiene sólo un valor de la lista; y un campo del tipo SET puede contener ninguno, uno o varios valores de la lista.

Hay más características de estos dos campos de MySQL, que les hace diferenciarse y es necesario conocerlas para decidir cual es más apropiado para nuestro diseño de la base de datos.

Sigue leyendo Diferencias entre ENUM y SET en MySQL