una tablas recomendaciones queries porque para optimizador lenta las grandes dañan datos cuello consulta como cantidades botella agilizar mysql codeigniter session-state php

mysql - tablas - ¿La clase de sesiones de Codeigniter con la opción de almacenamiento de la base de datos no está optimizada?



porque se dañan las tablas en mysql (1)

Solo puede haber una fila, que coincida con user_agent y session_id, por lo que no habrá necesidad de limitar el número de selecciones, ya está limitado por ser el único.

El problema ha sido reportado a los desarrolladores de Codeigniter Reactor en Bitbucket y descartado como no válido:

https://bitbucket.org/ellislab/codeigniter-reactor/issue/422/session-class-should-use-limit-1-when

Su respuesta:

el campo session_id es una clave principal, por lo que será una fila única

¿Hay algún punto usando MySQL "LIMIT 1" cuando se consulta en el campo indexado / único?

Por lo tanto, parece que esto no es, de hecho, una optimización, es simplemente innecesario.

Utilizo la clase de sesión de codeigniter con la opción de almacenar datos de sesión en una base de datos. Este es un ejemplo de la consulta de selección que se ejecuta para cada solicitud de usuario para recuperar una sesión:

SELECT * FROM (`ci_sessions`) WHERE `session_id` = ''f7fd61f08a229kdu3093130a3da17e14'' AND `user_agent` = ''Mozilla/5.0 (Macintosh; Intel Mac OS X 10.6; rv:5.''

Aquí está la estructura de la tabla para los datos de sesión como se define en la guía del usuario :

CREATE TABLE IF NOT EXISTS `ci_sessions` ( session_id varchar(40) DEFAULT ''0'' NOT NULL, ip_address varchar(16) DEFAULT ''0'' NOT NULL, user_agent varchar(50) NOT NULL, last_activity int(10) unsigned DEFAULT 0 NOT NULL, user_data text DEFAULT '''' NOT NULL, PRIMARY KEY (session_id) );

Tengo entendido que siempre que tenga una consulta que tenga como objetivo devolver un solo resultado, es una buena práctica usar LIMIT 0, 1 para que cuando el motor de base de datos encuentre la fila deseada, simplemente devuelva en lugar de seguir escaneando la tabla completa para ver más coincidencias. Por lo tanto, sería más eficiente que esta consulta se escriba como:

SELECT * FROM (`ci_sessions`) WHERE `session_id` = ''f7fd61f08a229kdu3093130a3da17e14'' AND `user_agent` = ''Mozilla/5.0 (Macintosh; Intel Mac OS X 10.6; rv:5.'' LIMIT 0, 1

¿Hay alguna razón por la que no esté escrito de esta manera?