Я использую класс сеанса codeigniter с возможностью хранить данные сеанса в базе данных.Это пример запроса на выборку, который выполняется для каждого пользовательского запроса на получение сеанса:
SELECT *
FROM (`ci_sessions`)
WHERE `session_id` = 'f7fd61f08a229kdu3093130a3da17e14'
AND `user_agent` = 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10.6; rv:5.'
Вот структура таблицы для данных сеанса, как определено в руководстве пользователя :
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)
);
Насколько я понимаю, всякий раз, когда у вас есть запрос, предназначенный для возврата одного результата, рекомендуется использовать LIMIT 0, 1, чтобы, когда механизм базы данных находил нужную строку, он просто возвращался, а не продолжалпросканируйте всю таблицу на предмет совпадений.Поэтому было бы более эффективно, чтобы этот запрос был записан как:
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
Есть ли причина, по которой он еще не был написан таким образом?