MySQL - kardex con MySQL

   
Vista:
Imágen de perfil de Eduardo

kardex con MySQL

Publicado por Eduardo (3 intervenciones) el 28/08/2017 20:44:47
Saludos expertos,

Si yo creo una tabla para kardex de la siguiente forma:

1
2
3
4
5
6
7
8
9
10
11
CREATE TABLE `kardex` (
`idKardex` bigint(20) NOT NULL AUTO_INCREMENT,
`IdProducto` int(11) NOT NULL,
`NumeroDoc` varchar(12) NOT NULL,
`TipoMovimiento` char(1) NOT NULL,
`FechaMovimiento` date NOT NULL,
`Cantidad` decimal(10,4) DEFAULT NULL,
`Precio` decimal(10,4) DEFAULT NULL,
PRIMARY KEY (`idKardex`),
KEY `pk_idKardex` (`IdProducto`)
)


Como debo crear mi indice para que al hacer este select la respuesta sea lo más rápido posible ya que mis registros en kardex serán 10 veces más registros por mes (36,000 aprox) que la cantidad de productos que tengo (3,000 aprox).:

1
2
3
select *
from kardex
where idProducto = 1000 and FechaMovimiento >= '20170801' and FechaMovimiento <= '20170831'


Saludos y gracias anticipadas.
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
Imágen de perfil de Leonardo Daniel A.

kardex con MySQL

Publicado por Leonardo Daniel A. (27 intervenciones) el 28/08/2017 20:59:14
Índices compuestos

Los índices compuestos son simplemente aquellos que están basados en múltiples columnas. MySQL únicamente usa un índice por tabla cuando está procesando una consulta. Esto significa que si tenemos varias columnas que frecuentemente aparecen juntas en una cláusula WHERE, tenemos la oportunidad de acelerar estas consultas al crear un índice compuesto.

Si una tabla tiene un índice formado por múltiples columnas, cualquier prefijo más a la izquierda puede ser usado por el optimizador de consultas de MySQL para encontrar las filas. Por ejemplo, si tenemos un índice compuesto por tres columnas (col1, col2, col3), tendríamos capacidades de búsqueda en (col1), (col1, col2) y (col1, col2, col3).

MySQL no puede usar un índice parcial si las columnas no forman un prefijo más a la izquierda del índice. Supongamos que tenemos unas sentencias SELECT como estas:

mysql> SELECT * FROM algunaTabla WHERE col1=valor1;
mysql> SELECT * FROM algunaTabla WHERE col2=valor2;
mysql> SELECT * FROM algunaTabla WHERE col2=valor2 AND col3=valor3;
Si el índice existe en (col1, col2, col3), sólo la primera de estas consultas usará el índice. La segunda y la tercera involucran a las columnas en el índice, pero (col2) y (col2, col3) no son los prefijos más a la izquierda de (col1, col2, col3).

Este es otro ejemplo. Consideremos la siguiente definición de una tabla:

CREATE TABLE usuarios(id int, nombre varchar(50), apellidos varchar(70));
Si frecuentemente hacemos consultas en la tabla usuarios basadas en el nombre como en los apellidos, podemos beneficiarnos de un índice compuesto en las columnas nombre y apellidos.

ALTER TABLE usuarios ADD INDEX idx_nombre(nombre, apellidos);
Debido a la forma en que MySQL construye los índices compuestos, éste puede usar el índice idx_nombre para resolver consultas basadas sólo en el nombre, o en el nombre y los apellidos, sin embargo, no usará el índice en una consulta que haga referencia únicamente a la columna apellidos.

Por ejemplo, de las siguientes tres consultas, sólo las dos primeras harían uso de nuestro índice idx_nombre.

SELECT * FROM usuarios WHERE nombre='Eduardo';
SELECT * FROM usuarios WHERE nombre='Eduardo' AND apellidos='Zarate M';
SELECT * FROM usuarios WHERE apellidos='Zarate M';




http://programacion.net/articulo/indices_y_optimizacion_de_consultas_305/2
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
1
Comentar
Imágen de perfil de Eduardo

kardex con MySQL

Publicado por Eduardo (3 intervenciones) el 04/09/2017 18:23:14
Muchas gracias Leonardo, claro como el agua. ¿ Me podrías dar algún tip para la creación de un indice para una tabla de kardex ?

Mil gracias por tu tiempo.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar